在这个while循环中只有在GetMessage的返回值为WM_QUIT时结束,我的问题是为什么这个while循环不卡呢?

解决方案 »

  1.   

    GetMessage消息队列为空会挂起线程,不占用CPU,有消息来就响应,当然不卡
      

  2.   

    能说得再详细一些吗 
    GetMessage消息队列为空会挂起 这是是不是又得有函数一直来检测是否有新消息到来 那这岂不是又得有一个while 循环?
      

  3.   

    没消息的时候GetMessage不会返回,而是再其内部处于休眠状态,没占用CPU。
      

  4.   


    有while也不意味着一定会卡,比如while (1) Sleep(1);
    这句也是一个死循环,分段休眠1毫秒,但是由于执行一次while (1)的回跳jmp指令所需时间连1微妙都不需要,也就是说CPU大部分时间都在Sleep的休眠中,这样同样也不会卡机。
    所以即便存在某一种循环检测,只要平衡好检测时间和休眠时间,也是不会卡机的。不过GetMessage的实现似乎不同,内核里面会在将消息扔进队列的同时,唤醒该线程。