我在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 );
}
}
这样可以正常工作,但如果线程完成,则在窗口上的某些操作完成后(鼠标,焦点等),它不会触发。如果收到消息或线程完成,我怎么能有循环触发器?
谢谢......答案 0 :(得分:5)
您可以让线程在完成时向您的UI线程发送消息(使用PostThreadMessage),而不是测试消息循环中的线程状态。然后,您需要做的就是在WindowProc中处理该消息。
答案 1 :(得分:2)
您是否看过MsgWaitForMultipleObjectsEx函数?
答案 2 :(得分:1)
线程句柄在线程终止时发出信号。因此,不是调用GetMessage,而是调用MsgWaitForMultipleObjects:返回值将指示某些消息可用 - 通过调用PeekMessage刷新任何消息,或者已发出信号句柄。