cpx*_*cpx 4 winapi message-queue game-loop
仅游戏循环使用50%的CPU使用率,我还没有完成任何渲染工作.我在这做什么?
while(true)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if(msg.message == WM_QUIT ||
msg.message == WM_CLOSE ||
msg.message == WM_DESTROY)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
//Run game code, break out of loop when the game is over
}
}
Run Code Online (Sandbox Code Playgroud)
经典忙/等待循环.您的CPU忙于检查(并无限制地重新检查)消息.您需要以阻止方式等待消息,或者更有可能使用定期唤醒游戏线程的计时器,以便它可以完成其工作.然后游戏线程会消失,直到下次它被唤醒.
您已创建忙等待循环.您可能正在使用100%的一个核心,因此50%的双核心.
您需要找到一种方法来阻止读取(在单独的线程中),根据需要阻止和退出I/O调用,或者在线程中执行其他有用的操作.每种策略都有其优点和缺点.单独的线程需要同步的通信方法,如互斥锁.掉出I/O意味着当没有消息时,此线程中没有其他任何有用的东西.在循环中执行其他操作可能会导致块状处理("其他内容"会在较少的消息上处理,而在更多消息上会更少处理).
归档时间: |
|
查看次数: |
3667 次 |
最近记录: |