线程同步的问题
我开了一个线程去做某个循环,在循环中有个BOOL变量来判断是否退出。。
CWinThread* m_pWinThread = AfxBeginThread(SendThread, (LPVOID)NULL,
THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED, NULL);
if (m_pWinThread != NULL)
{
m_pWinThread->m_bAutoDelete = FALSE;
m_pWinThread->ResumeThread();
m_bStopTransport = FALSE;
return TRUE;
}
线程函数是这样的:
UINT SendThread(LPVOID lpParam)
{
while (true) {
if (m_bExit) // m_bExit判断是否退出的BOOL变量
break;
// do something...
}
return 1;
}
比如线程在运行一半的时候,我想结束,这时设置m_bExit为true; 代码如下
void StopThread()
{
if (m_pWinThread != NULL) {
m_bExit = TRUE;
BOOL bRet = WaitForSingleObject(m_pWinThread->m_hThread, 5000);
if (bRet == WAIT_OBJECT_0)
AppendMessage(_T("Wait success!\n"));
else
AppendMessage(_T("Wait time out!\n"));
}
}
结果每次都是等待超时,让我奇怪的是,当m_bExit = TRUE;以后,程序就阻塞了
那个线程函数SendThread也没有执行,按书上的说法,当Wait一个线程的时候,
主线程(执行等待函数的那个)会挂起,时间都分配给等待的那个线程去执行,
当等待的那个线程返回以后,Wait函数也被激发,从而返回。。。
可是为什么我这里等待和被等待的都被冻结,而一直到超时以后,那个SendThread
才会继续执行呢?