我什么时候应该使用像 MsgWaitForMultipleObjects 这样的等待函数,什么时候不应该?
When should I use a wait function like MsgWaitForMultipleObjects, and when shouldn't I?
所以我试图了解Unreal Engine在WindowsOS上的消息处理代码,但我没有发现函数MsgWaitForMultipleObjects或MsgWaitForMultipleObjectsEx在消息泵代码。
引擎消息泵送是这样的:
MSG Message;
// standard Windows message handling
while(PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
对于上下文,此代码将 运行 每帧一到三次,这意味着代码将在应用程序的整个 运行 宁时间内平均每 2 - 5 毫秒执行一次。 A)这是否使等待功能变得不必要?或者我在这里遗漏了什么!
B) 是否有粗略估计应用程序在处理传入消息之前可以忙于 'other stuff' 的时间?例如,如果应用程序仅每 50 毫秒处理一次消息,这是一种不好的做法吗?或者这是一种合理的方式吗?如果这个周期变成 500 毫秒呢?
如果您需要在单个线程中同时处理 window 消息处理和内核处理或可警告等待,请使用 MsgWaitForMultipleObjects/etc。如果您只进行消息处理,那么只需使用普通的基于 GetMessage 的消息循环,如果只进行内核句柄或可警告等待,则酌情使用 WaitForMultipleObjects。
所以我试图了解Unreal Engine在WindowsOS上的消息处理代码,但我没有发现函数MsgWaitForMultipleObjects或MsgWaitForMultipleObjectsEx在消息泵代码。 引擎消息泵送是这样的:
MSG Message;
// standard Windows message handling
while(PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
对于上下文,此代码将 运行 每帧一到三次,这意味着代码将在应用程序的整个 运行 宁时间内平均每 2 - 5 毫秒执行一次。 A)这是否使等待功能变得不必要?或者我在这里遗漏了什么!
B) 是否有粗略估计应用程序在处理传入消息之前可以忙于 'other stuff' 的时间?例如,如果应用程序仅每 50 毫秒处理一次消息,这是一种不好的做法吗?或者这是一种合理的方式吗?如果这个周期变成 500 毫秒呢?
如果您需要在单个线程中同时处理 window 消息处理和内核处理或可警告等待,请使用 MsgWaitForMultipleObjects/etc。如果您只进行消息处理,那么只需使用普通的基于 GetMessage 的消息循环,如果只进行内核句柄或可警告等待,则酌情使用 WaitForMultipleObjects。