在一个类当中声明一个CEvent对象,就可以通过设置这个对象的信号状态来控制线程之间的同步。
线程的创建用到了AfxBeginThread.
相应于这个函数的线程函数的格式为 UINT yourFunc(LPVOID lparam);
这要在创建线程方法中,判断一下线程是否为NULL,如果不为NULL,就创建线程,而对应于结束线程方法中,也是如此,如果为NULL,直接return ,如果不为NULL,就用
假设线程为类的字段: CWinThread m_pThread;
waitForSingleObject(m_pThread, INIFITE);
delete m_pThread;
m_pThread = NULL;
对于创建线程的方法中,在判断完m_pThread ==/!= NULL 之后,就设置m_pEvent->resetEvent();使这个事件对象变为无信号状态。当然在此之前的AfxBeginThread中的标记为设为CREATE_SUSPEND, 并
m_pThread.bAutoDelete = FALSE;
m_pThread.resumeThread();
而在线程函数中就要用到下面的方法来判断什么时候终止。
//WAIT_OBJECT_0 表示时间处于有信号状态
if(waitForSingleObject(m_pEvent->m_hObject , 0) == WAIT_OBJECT_0){
//这个时候表明线程该终止了,因为在结束线程的方法里,设置了m_pEvent->setEvent();
}
在结束线程的方法里:
就调用:
m_pEvent->setEvent();
::WaitForSingleObject(m_pThread , INIFITE);
delete m_pThread;
m_pThread =NULL;