【发布时间】:2025-12-21 12:40:07
【问题描述】:
我正在尝试使用 C++ 创建游戏,我想为 fps 创建限制,但我总是得到比我想要的更多或更少的 fps。当我查看具有 fps 限制的游戏时,它总是精确的帧率。尝试使用Sleep() std::this_thread::sleep_for(sleep_until)。例如Sleep(0.01-deltaTime) 获得 100 fps 但最终得到 +-90fps。
当任何睡眠都不精确时,这些游戏如何如此精确地处理 fps?
我知道我可以使用无限循环来检查时间是否过去,但它正在使用 CPU 的全部功能,但我想在没有 VSync 的情况下将 CPU 使用率降低到这个限制。
【问题讨论】:
-
有 std::this_thread::sleep_until(timepoint) 不是 std::this_thread::sleep_for(sleep_untill)。显示你的代码,你听起来很困惑。
-
查看media players such as VLC的源代码。几乎可以肯定不会使用任何类型的
sleep()。 -
如果它是用于“C++”的,为什么要标记为“C”?
-
在 C 中我会使用
clock()(虽然它不是“墙上时间”)并匹配一般吞吐量,而不是尝试对单个帧进行计时/控制。如果系统能跟上,那就太好了。千万不要在游戏中浪费时间睡觉,一定有更好的事情要做。 -
启用垂直同步以显示器的刷新率绘制并防止撕裂。查看
glfwSwapInterval()。