peekmessage导致cpu100%怎么办
while (TRUE)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if(msg.message==WM_QUIT)break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
itick=GetTickCount();
if(itick> iticktr)
{
iticktr=itick+1000;
game();
}
}
}
这个代码是游戏编程入门一书的代码,开始不知道cpu100%,后来看网上有人说,看了下,真的是100%,不知道如何解决
大家处理高频刷新是如何实现的呢?
[解决办法]
在循环中加Sleep(1), 这段代码肯定会100%的
[解决办法]
支持1楼,加slepp就可以了
[解决办法]
也可以加SwitchToThread,或许效果更好
[解决办法]
在循环中加Sleep(1), 这段代码肯定会100%的
[解决办法]
应该加Sleep(0),加了Sleep不会导致错过某个消息,因为消息是放在消息队列里面的,下次还可以取到。
除了加Sleep,应该还有一种方法是用MsgWaitForMultipleObjects来等待消息并设置一个Timeout,如500ms,如果在等待中间有消息,就唤醒线程结束等待并会继续执行,这时可以用PeekMessage。由于经常处于等待之中,线程处于睡眠状态,CPU不会100%,而消息一到来,就会立刻唤醒线程。