我有一个应用程序,它使用 MsgWaitForMultipleObjects 进行消息循环,以在发送 ui 消息时捕获其他事件。似乎只要窗口被移动或调整大小,DefWindowProc 就会开始它自己的消息循环,直到释放鼠标。这种情况会阻止外部循环同时捕获其他消息。
我不想仅仅因为这个而对应用程序进行多线程处理。有没有其他方法可以解决它?
我有一个应用程序,它使用 MsgWaitForMultipleObjects 进行消息循环,以在发送 ui 消息时捕获其他事件。似乎只要窗口被移动或调整大小,DefWindowProc 就会开始它自己的消息循环,直到释放鼠标。这种情况会阻止外部循环同时捕获其他消息。
我不想仅仅因为这个而对应用程序进行多线程处理。有没有其他方法可以解决它?
Windows API 中有几个额外的地方会进入它们自己的消息循环。如果您需要在这些时间继续处理您的消息,那么您将需要一个单独的线程。
MsgWaitForMultipleObjects 在传统的多线程程序中很少使用。它在游戏中有一些用途——传统的非客户端框架元素被省略,API 像“MessageBox”和“DoDragDrop”被避免......
通常它在不承载可见窗口但使用消息队列作为线程间消息传递系统并且还需要等待内核句柄的“UI工作者”线程中找到它的最佳用途。
在您的情况下,创建第二个线程似乎无法避免。具有讽刺意味的是,PostThreadMessage + MsgWaitForMultipleObjects 可能是在 GUI 线程和“ui”工作线程之间建立可靠通信机制的最简单方法。