读书人

win32SDK编程CPU100%如何解决

发布时间: 2012-03-13 11:21:12 作者: rapoo

win32SDK编程,CPU100%怎么解决?
用win32写游戏程序,然后CPU满载了,亏了我的是i5双核4线程,cpu25%,也就是说,单核满载了。。。要不然直接什么都干不了了。。。我想问一下,怎么才能降低cpu占用率呢?以下是我WinMain里面的部分代码:

C/C++ code
while(1)    {        if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))        {            if(msg.message==WM_QUIT)                break ;            TranslateMessage(&msg) ;            DispatchMessage(&msg) ;        }        if(gameStatus.Game_Main()==0)            break ;    }//这段代码我是看的是《Windows游戏编程大师技巧(第二版)》里面的代码。后来书里用了directX了,但我只用SDK写。。。

现在很纠结啊,CPU满载,用了双缓冲了,画面还是不清楚,大概是刷新率太高了吧。。。我的刷新率是(1000/36)次/秒。
但我想,很多游戏逻辑很复杂,但是cpu占用率很低,我想知道是怎么实现的。。。或者说是怎么把cpu控制权还给操作系统的。用窗口回调函数的TIMER定时器很可能出现延迟,这是我非常不希望看到的事情。。。求大神们解决方案。。。

[解决办法]
PeekMessage 该成 GetMessage.
[解决办法]
游戏的界面需要一个主循环 重点检查下Game_Main()
while(1)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if(msg.message==WM_QUIT)
break ;
TranslateMessage(&msg) ;
DispatchMessage(&msg) ;
}
if(gameStatus.Game_Main()==0) //检查你的Game_Main() 函数,在这里面需要延时或等待类操作比如
// DD_Flip();
// Wait_Clock(30);

break ;
}
[解决办法]
PeekMessage比Get吃 cpu..
但绘制游戏确实用peek
[解决办法]
PeekMessage只是检查一下消息,没有消息的话也会返回,这样简化一下就变成了while(1)了。

读书人网 >VC/MFC

热点推荐