我不知道是否有这两个片段之间的差异:使用PostQuitMessage和仅处理所有消息有什么不同?
一:
void main()
{
// ...
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
ExitProcess(0);
}
// ...
void quit()
{
PostQuitMessage(0);
}
二:
bool quit = false;
void main()
{
// ...
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if(quit)
{
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&_msg);
}
ExitProcess(0);
}
}
// Shouldn't get here
ExitProcess(1);
}
// ...
void quit()
{
quit = true;
PostThreadMessage(GetCurrentThreadId(), WM_NULL, 0, 0);
}
很抱歉,但我不能想出更短的片段。
我的问题的关键在于是否调用PostQuitMessage
与GetMessage
处理所有消息等效于PeekMessage
处理所有消息,直到它返回FALSE
。
According to Raymond,WM_QUIT
是“仅当消息队列为空时才生成”,所以它看起来像两个方法应该做同样的事情,但也许有一个细微的差别。
这是纯粹的知识分子的好奇心还是你试图用你的非标准方法来达到特定的效果? – 2014-10-10 23:34:30
@AdrianMcCarthy我正在查看一个使用某种非标准编程风格的人的代码库。除此之外,除非确实需要,否则他不愿意更改代码。所以我想知道他所做的至少是正确的。 – Paul 2014-10-11 09:16:48