我使用 opengl 制作的游戏有点问题。游戏有时会半速运行,有时会正常运行。
我不认为是 opengl 导致了问题,因为它在我的计算机上以 14,000 fps 的速度运行。 (即使以半速运行)
这让我相信是“游戏计时器”导致了问题。游戏计时器在单独的线程上运行,并被编程为在其“循环”结束时通过 Sleep(5) 调用暂停。如果我删除 Sleep(5) 调用,它运行得如此之快以至于我几乎看不到屏幕上的 Sprite 。 (可预测的行为)
我尝试在 Render() 线程的末尾(也在它自己的线程上)抛出一个 Sleep(16)。此操作应将 fps 限制在 62 左右。请记住,该应用程序有时以预期速度运行,有时以一半速度运行(我在我拥有的两台计算机上都尝试过并且它仍然存在)。
当它以预期速度运行时,fps 为 62(好),有时为 31-ish(差)。它从不在半速和全速中间执行之间切换,即使重启后问题仍然存在。
所以导致缓慢的不是渲染,而是 Sleep() 函数
我猜我想说的是 Sleep() 函数与它实际休眠的时间不一致。这是经过验证的事情吗?我可以使用更好的 Sleep() 函数吗?
最佳答案
可等待计时器(CreateWaitableTimer
和 WaitForSingleObject
或其他类似的计时器)更适合定期唤醒。
但是,在您的情况下,您可能应该只启用 VSYNC。
关于c++ - Windows sleep 不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16827905/