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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值