限制外部程序的帧率

时间:2009-12-10 23:39:39

标签: c++ c windows frame-rate

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

理想地寻找C / ++中的一些建议,老老实实地不确定从哪里开始。

3 个答案:

答案 0 :(得分:2)

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

FPS游戏的运作方式是,它绘制屏幕,​​键盘/鼠标/等处理和游戏逻辑,然后再次绘制屏幕。紧紧的循环。

它可以更快地绘制屏幕(这主要是你的图形适配器的问题),它的逻辑繁忙工作完成得越快,帧速率就越快。因为这就是所有正在发生的事情。

帧速率不会降低处理速度,反之亦然。如果你在屏幕涂料之间停顿,那么你的CPU运行会有点冷却,但是没有完成任何其他工作。


换句话说:帧率是一种效果,而不是原因。你的PC花费每一个备用的微秒进行屏幕更新,因为它没有更好的事情要做。

当你看到延迟时,那就是你的PC真的陷入了巨大的内存移动,磁盘读取,屏幕计算(想想1000个敌人飞向你)或窒息互联网延迟。滞后不是由屏幕重绘引起的。


<强>更新

我很难相信你在说什么,但我只是这里的答案人。如果您真的想降低帧速率,请为您的CPU提供一些操作。运行Linux内核编译。没等了,gamez = Windowz。拉起Calc.exe并向科学模式询问大数的阶乘。走着瞧吧。如果帧速率没有下降,请同时使用2或3个Calc实例。

答案 1 :(得分:1)

使用线程API暂停游戏的线程几毫秒,然后恢复它们。 This article (C++) on CodeProjectthis stack (although C#)详细介绍了这一点。

答案 2 :(得分:0)

kkapture(开源)为演示做了这个。我不知道是否可以为您的目的进行修改。它创建了一个代理视频驱动程序,但它可能太难以处理。