关于GetMessage和DispatchMessage

在看 Programming Role Playing Games with DirectX 一书中有下面的代码片段

 

while (Msg.message  !=  WM_QUIT)
{
    
if(PeekMessage(&Msg,NULL,0,0,PM_REMOVE))
    
{
        TranslateMessage(
&Msg);
        DispatchMessage(
&Msg);
    }

  
else {}
}

发现建立的一个简单的窗口cpu的占有率几乎100%后来在其他介绍window api的书上有下面类似写法:

while ( GetMessage(  & msg, NULL,  0 0 ))
{
       TranslateMessage( 
&msg);//进行一些键盘消息的转换
       DispatchMessage( &msg);
}

// The DispatchMessage function dispatches a message to a window procedure. 
// It is typically used to dispatch a message retrieved by the GetMessage function. 

 

后来在网上查到,我总结如下:

后者是用SDK进行Windows程序设计的标准写法。
使用PeekMessage一定会使系统变慢,因为PeekMessage无论是否有消息都会返
回,因此你的程序始终在执行一个死循环,在抢先多任务系统中会使系统变慢
在win3.x这种写作时多任务系统中则会使操作系统down掉。

GetMessage检查事件队列,如果没有事件就会挂起本进程等待时间发生 

DispatchMessage总是返回的,及时是空消息也要讲小许分派到窗口过程处理函数的,这样自然cpu100%了

但是Programming Role Playing Games with DirectX 一书用的是前者,不知道3D游戏里面要检测所有的包括空消息的处理么?继续研究中,哪天明白了为什么这本书里面这么写吧,高手看到了一定要给点指点

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值