消息循环不会导致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%。
上面循环里面的代码屏蔽掉后, 是一个死揗环,这样没有用任何
方式告䜣系统你要交出控知权,所以你会在这个线程的时间段里一直占用。直到此线程此轮的时间片用完。由系统强行切换别的线程执行。

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