我有一个应用程序,消息循环使用MsgWaitForMultipleObjects在抽取ui消息时捕获其他事件。似乎只要窗口被移动或调整大小,DefWindowProc就会开始它自己的消息循环,直到鼠标被释放。这种情况阻止了外部循环在此期间捕获其他消息。
因为这个原因,我讨厌多线程应用程序。有没有其他方法可以解决它?
答案 0 :(得分:0)
Windows API中还有一些其他位置将进入自己的消息循环。如果您需要在这些时间内继续处理您的消息,那么您将需要一个单独的线程。
答案 1 :(得分:0)
MsgWaitForMultipleObjects在传统的多线程程序中几乎没有用处。它在游戏中有一些用处 - 省略了传统的非客户框架元素,避免了像“MessageBox”和“DoDragDrop”这样的API ......
通常它最好用在不支持可见窗口的“UI worker”线程中,但是使用消息队列作为线程间消息传递系统,还需要等待内核句柄。
在你的情况下,制作第二个线程似乎不可避免。具有讽刺意味的是,PostThreadMessage + MsgWaitForMultipleObjects可能是在GUI线程和“ui”工作线程之间建立可靠通信机制的最简单方法。