我正在用AfxBeginThread在MFC中创建一个工作线程,但线程没有被调度。下面是代码:
CWinThread* worker = AfxBeginThread(initialUpdateWorkerThread, this);
DWORD dwExitCode = 0;
while(GetExitCodeThread(worker->m_hThread, &dwExitCode))
{
if(dwExitCode != STILL_ACTIVE)
break;
::Sleep(100);
}
当我运行这个,这个循环只是活锁,因为initialUpdateWorkerThread从来没有被调用(我把断点和消息框在它的顶部),所以dwExitCode总是still_active。但是,如果我在循环之前调用AfxMessageBox,但在AfxBeginThread之后,则调用该函数。这让我认为,不知何故,我没有调用正确的函数来获得线程调度,但调用AfxMessageBox导致它得到调度。
如何强制调度线程?我认为睡眠可以做到这一点,但在这种情况下,它似乎没有。
您的工作线程可能正在尝试向主线程发送消息,但由于您不在主线程上处理消息,因此工作线程只是等待。您可以通过简单地进入调试器来确认这一点,看看工作线程正在做什么。