win32消息泵,do dispatchMessage()处理整个消息队列或仅仅是顶部消息
Win32 message pump, does DispatchMessage() handle entire message queue or just top message?
所以我一直在阅读Win32消息泵上,我很好奇dispatchMessage()函数是否涉及整个消息队列,或者只是队列顶部的消息?
例如,我看过诸如:
的循环while(true)
{
MSG msg;
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
do
{
} while (clock.getTimeDeltaMilliseconds() < 1.66f); // cap at 60 fps
// run frame code here
}
在此示例中,每个消息都会被处理,还是此循环结构仅导致每帧处理一条消息?
如果一次只处理一条消息,我应该将if(peekmessage)语句更改为一段循环以确保处理所有消息吗?:
while(true)
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
return;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
do
{
} while (clock.getTimeDeltaMilliseconds() < 1.66f); // cap at 60 fps
// run frame code here
}
它仅处理顶部消息。MSG
是一种结构,该结构具有有关一个消息的信息,在调用GetMessage
或PeekMessage
时填写,前者是阻止功能。然后,您将有关一条消息的信息传递给DispatchMessage
。
如果要在循环中进行的其他操作之前处理整个消息队列,则应将该部分包装在循环中。
DispatchMesasge
与消息队列无关,它仅处理您传递给它的消息,从消息队列中删除消息的实际函数是PeekMessage
,它只会删除或查看一个消息,因此,您是对的,您应该使用while
循环来处理队列中的所有消息
相关文章:
- boost::进程间消息队列引发错误
- 避免使用 boost::进程间::消息队列创建文件
- 提升消息队列 跨两个进程未接收
- 可以将Boost消息队列文件重定向到用户指定的位置
- 使用加速进程间创建消息队列 - 内存访问冲突
- 如何检查提升消息队列是否存在
- Win32 消息队列在使用 OpenGL 渲染时被淹没
- 在尝试使用boost时断言.跨很多过程中的互动消息队列
- GetMessage/PeekMessage - 删除消息队列中的所有消息
- IPC Unix 消息队列线程安全吗?
- 在.c文件接收函数中使用Linux中的MSGGET创建消息队列未实现错误
- boost消息队列线程安全和进程安全吗?
- 为什么我的无锁消息队列段错误:(?
- 在控制台应用程序中处理空的windows消息队列
- 关于在这种情况下消息队列与共享内存的适用性或适用性
- boost::进程间消息队列创建时的竞争条件
- 从内存转储中查找线程消息队列中的消息
- win32消息泵,do dispatchMessage()处理整个消息队列或仅仅是顶部消息
- 如何使用Boost进程间消息队列for Windows
- 来自另一个线程的 SendMessage() 调用是否将消息发布到消息队列