窗口移动和调整大小会干扰MsgWaitForMultipleObjects

时间:2009-10-05 07:27:56

标签: winapi event-handling message-loop

我有一个应用程序,消息循环使用MsgWaitForMultipleObjects在抽取ui消息时捕获其他事件。似乎只要窗口被移动或调整大小,DefWindowProc就会开始它自己的消息循环,直到鼠标被释放。这种情况阻止了外部循环在此期间捕获其他消息。

因为这个原因,我讨厌多线程应用程序。有没有其他方法可以解决它?

2 个答案:

答案 0 :(得分:0)

Windows API中还有一些其他位置将进入自己的消息循环。如果您需要在这些时间内继续处理您的消息,那么您将需要一个单独的线程。

答案 1 :(得分:0)

MsgWaitForMultipleObjects在传统的多线程程序中几乎没有用处。它在游戏中有一些用处 - 省略了传统的非客户框架元素,避免了像“MessageBox”和“DoDragDrop”这样的API ......

通常它最好用在不支持可见窗口的“UI worker”线程中,但是使用消息队列作为线程间消息传递系统,还需要等待内核句柄。

在你的情况下,制作第二个线程似乎不可避免。具有讽刺意味的是,PostThreadMessage + MsgWaitForMultipleObjects可能是在GUI线程和“ui”工作线程之间建立可靠通信机制的最简单方法。