线程分为界面线程和工作线程
界面线程:
学过windows程序设计的都知道每一个窗口都有一个消息循环来处理各种消息.所以界面线程的机制和窗口过程差不多,是比较复杂的.
工作线程:
很简单的一种线程,只能用来打印输出循环等.不能进行消息处理.所以功能不是很强大,贵在简单.
创建工作线程的函数:
CWinThread* AfxBeginThread(
AFX_THREADPROC pfnThreadProc, //工作线程的函数
LPVOID pParam, //线程的参数
int nPriority = THREAD_PRIORITY_NORMAL, //线程优先级,默认
UINT nStackSize = 0, //栈大小,默认
DWORD dwCreateFlags = 0, //创建标志,默认
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL //线程安全属性,默认
);
线程函数定义:
UINT 函数名(LPVOID lParam)
{
//在这里处理数据
return 0;
}
线程函数例子:
UINT Thread(LPVOID lParam)
{
for (int i = 0; i < 100;i++)
{
SetDlgItemText(AfxGetApp()->m_pMainWnd->m_hWnd, IDC_STATIC, (LPCTSTR)lParam);
Sleep(1000);
SetDlgItemText(AfxGetApp()->m_pMainWnd->m_hWnd, IDC_STATIC, TEXT(“”));
Sleep(1000);
}
return 0;
}
1.创建线程
m_pWinThread = AfxBeginThread(Thread, TEXT("线程开始");
2.挂起,暂停线程
m_pWinThread->SuspendThread();//暂停,挂起线程
3.恢复,继续线程
m_pWinThread->ResumeThread();//继续,恢复线程
4.结束线程
TerminateThread(m_pWinThread->m_hThread, 0);
5.查看线程状态
DWORD dwExitCode = 0;
GetExitCodeThread(m_pWinThread->m_hThread, &dwExitCode);
if (dwExitCode == STILL_ACTIVE)
{
AfxMessageBox(TEXT("线程正在运行"));
}
else if(dwExitCode = EXCEPTION_SINGLE_STEP)
{
AfxMessageBox(TEXT("线程已经终止"));
}