BOOL WINAPI GetMessage(//阻塞型函數
_Out_ LPMSG lpMsg,
_In_opt_ HWND hWnd,
_In_ UINT wMsgFilterMin,
_In_ UINT wMsgFilterMax
);
while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
//注掉會導致死循環
//TranslateMessage(&msg);
//DispatchMessage(&msg);
}
}
在調用GetMessage的線程的消息隊列中取得與它相關窗口的消息放在一個消息結構後就返回。如果沒有消息發送到此函數第二個參數所代表的窗口,也沒有對這個線程的消息,操作系統會掛起這個線程(一旦有消息到達,進程會被喚醒,GetMessage馬上返回)。放出這個線程的cpu控知權。所以cpu佔有不是100%。
上面循環裏面的代碼屏蔽掉後, 是一個死揗環,這樣沒有用任何
方式告訢系統你要交出控知權,所以你會在這個線程的時間段裏一直佔用。直到此線程此輪的時間片用完。由系統強行切換別的線程執行。