我不知道是否有這兩個片段之間的差異:使用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