消息循環不會導致cup使用率過高

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%。
上面循環裏面的代碼屏蔽掉後, 是一個死揗環,這樣沒有用任何
方式告訢系統你要交出控知權,所以你會在這個線程的時間段裏一直佔用。直到此線程此輪的時間片用完。由系統強行切換別的線程執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章