c++ - 外部限制程序帧率

标签 c++ c windows frame-rate

试图找到一种方法,以类似于 VSync 的方式从外部限制程序/游戏的帧率,但限制为指定的数字(而不是屏幕刷新率)。在 FRAPS 中可以看到我的目标的一个完美示例,当录制视频时,帧速率限于录制速率。原因是对于图形密集度不高的快节奏游戏来说,可以阻止帧率大幅变化引起的“屏幕滞后”,但是 VSync 不适合,因为奇怪的是它会增加键盘/鼠标之间的延迟(两者都以高速率轮询,所以不是硬件问题)。

理想情况下寻找 C/++ 中的一些建议,老实说不知道从哪里开始。

最佳答案

我不确定你是否明白你在问什么。

FPS 游戏的运行方式是,先绘制屏幕,​​处理键盘/鼠标等操作和游戏逻辑,然后再次绘制屏幕。在一个紧密的循环中。

它绘制屏幕的速度越快(这主要是您的图形适配器的问题)并且完成其逻辑繁忙工作的速度越快,帧速率就会越快。因为这就是所有正在发生的事情。

帧速率不会减慢处理速度,恰恰相反。如果您在屏幕绘制之间暂停,您的 CPU 会运行得稍微凉爽一些,但不会完成任何其他事情。


换句话说:帧率是一种结果,而不是原因。您的 PC 会花费每一微秒的空闲时间来更新屏幕,因为它没有更好的事可做。

当您看到延迟时,那是您的 PC 确实因大量内存移动、磁盘读取、屏幕计算(想想 1000 个敌人向您飞来)而陷入困境,或者因 Internet 延迟而窒息。延迟不是由屏幕重绘引起的。


更新:

我很难相信你说的话,但我只是这里的回答者。如果你真的想降低你的帧率,让你的 CPU 有事可做。运行 Linux 内核编译。不等了,gamez = Windowz。拉起 Calc.exe 并询问大数阶乘的科学模式。走着瞧吧。如果帧速率没有下降,请并行使用 2 或 3 个 Calc 实例。

关于c++ - 外部限制程序帧率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1884905/

相关文章:

c++ - 在内联函数中使用静态数据成员

c++ - CRC16 modbus 计算为长数据包返回错误值

c++ - 我想生成序列 1,3,8,22,60 ,164 中的第 n 项,顺序为 Order(1) 或 order of (nlogn)

c - 接受字段中的有效输入

c - 如何使用 shift + ctrl 键在 C 中获得完全交互式的 bash 终端?

windows - Windows 服务的电子邮件警报

windows - 使用 Mingw 创建 OpenCV 3.1 的共享版本时未定义对 cv::redirectError 的引用

c++ - 5 年后,还有比 "Fastest Possible C++ Delegates"更好的东西吗?

c - 如何将 Basys mx3 计时器从十六进制更改为十进制

c++ - 在 C/C++ 窗口中终止进程