注:实习期间的关于多线程方面的笔记,只是自己的理解,不一定权威正确。请读者慎重,请谅解。
一、
MFC多线程
可以通过AfxBeginThread创建用户界面线程或者工作者线程
工作者线程例子:
AfxBeginThread函数说明:
AfxBeginThread( AFX_THREADPROC pfnThreadProc, //启动的函数
LPVOID pParam, //pParam : 传递入线程的参数,注意它的类型为:LPVOID,所以我们可以传递一个结构体入线程.
int nPriority = THREAD_PRIORITY_NORMAL, //0 设置优先级为正常。
UINT nStackSize = 0, //指定新创建的线程的栈的大小.如果为 0,新创建的线程具有和主线程一样的大小的栈
DWORD dwCreateFlags , //指定创建线程以后,线程有怎么样的标志.可以指定两个值CREATE_SUSPENDED : 线程创建以后,会处于挂起状态,直到调用:ResumeThread;0 : 创建线程后就开始运行.
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ); //如果为 NULL,那么新创建的线程就具有和主线程一样的安全性.
创建线程:
CWinThread *m_MyThread; //线程
m_MyThread=AfxBeginThread((AFX_THREADPROC)ThreadProc, NULL,0,0,CREATE_SUSPENDED,NULL);
//线程结束时不自动删除,才能获得lpExitCode,默认是TRUE
m_MyThread->m_bAutoDelete = FALSE;
m_MyThread->ResumeThread();
线程定义:
//线程函数
UINT WINAPI ThreadProc(LPVOID lpParameter)
{
while(1)
{
//可以通过Event信号对象或者bool值信号判断线程关闭条件
if(WaitForSingleObject(g_Dev.m_ThreadEvent, 0) == WAIT_OBJECT_0)
{
AfxEndThread(0); //关闭线程,后面的就不执行了
//break;
}
Sleep(10);
。。。。。
}
return0;
}