关于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游戏里面要检测所有的包括空消息的处理么?继续研究中,哪天明白了为什么这本书里面这么写吧,高手看到了一定要给点指点

你可能感兴趣的:(游戏,windows,api,null,任务)