【发布时间】:2012-06-02 22:08:01
【问题描述】:
我有一个应用程序,第二个线程在循环中调用GetMessage()。在某些时候,第一个线程意识到用户想要退出应用程序并通知第二个线程它应该终止。由于第二个线程卡在GetMessage(),程序永远不会退出。有没有办法等待超时消息?
我也对其他想法持开放态度。
编辑:(附加说明)
第二个线程运行sn-p的代码:
while ( !m_quit && GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
第一个线程将m_quit 设置为true。
【问题讨论】:
-
等待...哪个线程在循环中等待
GetMessage()?第一个线程,第二个线程,还是两者都有? -
第二个线程运行ˇGetMessageˇ循环。我应该发布一些代码吗?
-
代码总是有帮助的。我只是感到困惑,因为您的问题似乎使两个线程都被阻塞了。您不能只发送一条自定义消息说“您现在需要关闭吗?”
-
这个问题很有趣,但我不明白你为什么需要它。一旦主线程愿意退出,它只需要通知所有线程完成(
PostQuitMessage是你的朋友),然后等待它们完成(WaitForSingleObject,WaitForMultipleObjects)然后自己完成. -
@rodrigo 主要是因为我对 Windows API 不太了解 :) 如果这是推荐的做事方式,我会改成那样。