Win32,等待主消息队列中的线程?
Posted
技术标签:
【中文标题】Win32,等待主消息队列中的线程?【英文标题】:Win32, wait for thread in main msg queue? 【发布时间】:2010-11-10 12:58:05 【问题描述】:我在 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 );
这可以正常工作,但如果线程完成,它不会触发,直到窗口上的某些操作完成(鼠标、焦点等)。收到消息或线程结束时如何触发循环?
谢谢...
【问题讨论】:
【参考方案1】:您可以让线程在完成时将消息发布到您的 UI 线程(使用 PostThreadMessage),而不是在消息循环中测试线程状态。那么您需要做的就是在 WindowProc 中处理该消息。
【讨论】:
线程消息无法在 WindowPoc 中处理,因为它们没有关联的窗口(它将被传递到哪个窗口过程?)。也就是说,您的建议将起作用,因为无需处理该消息,考虑到示例代码的结构,它已发布这一事实就足够了。【参考方案2】:你看过 MsgWaitForMultipleObjectsEx 函数了吗?
【讨论】:
【参考方案3】:线程句柄在线程终止时发出信号。因此,不要调用 GetMessage,而是调用 MsgWaitForMultipleObjects:返回值将指示某些消息可用 - 通过调用 PeekMessage 刷新所有消息,或者已发出句柄信号。
【讨论】:
以上是关于Win32,等待主消息队列中的线程?的主要内容,如果未能解决你的问题,请参考以下文章