MFC和AfxBeginThread的线程调度问题

时间:2011-08-21 21:04:12

标签: multithreading mfc scheduling

我正在使用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_ACITVE。但是如果我在循环之前调用AfxMessageBox但是在AfxBeginThread之后调用该函数。这让我觉得我不是在调用正确的函数来调度线程,但是调用AfxMessageBox会导致它被调度。

如何强制安排线程?我认为睡眠会这样做,但在这种情况下它似乎不会。

1 个答案:

答案 0 :(得分:1)

您的工作线程可能正在尝试向主线程发送消息,但由于您没有在主线程上处理消息,因此工作线程只是等待。您可以通过直接进入调试器来查看工作线程正在做什么来确认这一点。