win32SDK编程,CPU100%如何解决

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)了。