何时应使用像 MsgWaitForMultipleObjects 这样的等待函数,何时不应使用?



所以我试图了解Windows操作系统上虚幻引擎的消息处理代码,我没有发现消息泵代码中MsgWaitForMultipleObjects或MsgWaitForMultipleObjectsEx函数的任何频繁使用。引擎消息泵送是这样的:

MSG Message;
// standard Windows message handling
while(PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{ 
TranslateMessage(&Message);
DispatchMessage(&Message); 
}

对于上下文,此代码将每帧运行一到三次,这意味着在整个应用程序运行期间,代码将平均每2 - 5毫秒执行一次。A)这样就不需要等待函数了吗?还是我遗漏了什么?

B)在处理传入消息之前,是否有任何粗略估计应用程序可能忙于"其他事情"的时间?例如,如果应用程序每50毫秒只处理一次消息,这是一种不好的做法吗?或者这是一种合理的做法吗?如果周期变成500毫秒呢?

如果您需要在单个线程中处理窗口消息处理和内核句柄或alertable等待,则使用MsgWaitForMultipleObjects/etc。如果您只做消息处理,那么只需使用普通的基于GetMessage的消息循环,如果只做内核句柄或alertable等待,那么使用WaitForMultipleObjects。

最新更新