c++ - Windows sleep 不一致?

标签 c++ winapi timer sleep

我使用 opengl 制作的游戏有点问题。游戏有时会半速运行,有时会正常运行。

我不认为是 opengl 导致了问题,因为它在我的计算机上以 14,000 fps 的速度运行。 (即使以半速运行)

这让我相信是“游戏计时器”导致了问题。游戏计时器在单独的线程上运行,并被编程为在其“循环”结束时通过 Sleep(5) 调用暂停。如果我删除 Sleep(5) 调用,它运行得如此之快以至于我几乎看不到屏幕上的 Sprite 。 (可预测的行为)

我尝试在 Render() 线程的末尾(也在它自己的线程上)抛出一个 Sleep(16)。此操作应将 fps 限制在 62 左右。请记住,该应用程序有时以预期速度运行,有时以一半速度运行(我在我拥有的两台计算机上都尝试过并且它仍然存在)。

当它以预期速度运行时,fps 为 62(好),有时为 31-ish(差)。它从不在半速和全速中间执行之间切换,即使重启后问题仍然存在。

所以导致缓慢的不是渲染,而是 Sleep() 函数

我猜我想说的是 Sleep() 函数与它实际休眠的时间不一致。这是经过验证的事情吗?我可以使用更好的 Sleep() 函数吗?

最佳答案

可等待计时器(CreateWaitableTimerWaitForSingleObject 或其他类似的计时器)更适合定期唤醒。

但是,在您的情况下,您可能应该只启用 VSYNC。

关于c++ - Windows sleep 不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16827905/

相关文章:

c++ - 基于航拍图像的地面机器人障碍物检测

c++ - 二叉搜索树 C++ 搜索操作总是给出 0;

c++ - 这个模板中的类型是什么?

c++ - 如何将状态栏放置在OPENGL之上?

c# - 计时器经过事件在 C# 命令行程序中触发两次

java - 定时器任务没有启动

c++ - lexical_cast int 到字符串

c++ - 如何检测 Windows 是否正在关闭或重新启动

windows - 使用 API 从我的应用程序监视 RAS 拨号连接

loops - Jmeter 如何延迟永远发送请求?