Win32,等待主消息队列中的线程?

时间:2010-11-10 12:58:06

标签: c++ windows winapi

我在WinMain中创建了一个线程,之后我有一个经典的msg循环:

while(GetMessage(&msg, NULL, 0, 0))
{

    if (!done){
        GetExitCodeThread(dThread,&dwCode);
        if (dwCode!=STILL_ACTIVE){
            //thread done
        }
    }

if (!IsDialogMessage (UWnd, & msg))
    {
        TranslateMessage ( & msg );
        DispatchMessage ( & msg );
    }
}

这样可以正常工作,但如果线程完成,则在窗口上的某些操作完成后(鼠标,焦点等),它不会触发。如果收到消息或线程完成,我怎么能有循环触发器?

谢谢......

3 个答案:

答案 0 :(得分:5)

您可以让线程在完成时向您的UI线程发送消息(使用PostThreadMessage),而不是测试消息循环中的线程状态。然后,您需要做的就是在WindowProc中处理该消息。

答案 1 :(得分:2)

您是否看过MsgWaitForMultipleObjectsEx函数?

答案 2 :(得分:1)

线程句柄在线程终止时发出信号。因此,不是调用GetMessage,而是调用MsgWaitForMultipleObjects:返回值将指示某些消息可用 - 通过调用PeekMessage刷新任何消息,或者已发出信号句柄。