【发布时间】:2016-07-26 11:03:23
【问题描述】:
我正在编写一个用于 Windows 的快速且相当准确的游戏计时器。 Microsoft 建议使用QueryPerformanceCounter() 进行高分辨率计时,它可以按预期工作,但我正在寻找产生更少执行开销的替代方案。
我做了一些谷歌搜索,发现提到了 QueryInterruptTime() 及其对应的 QueryInterruptTimePrecise(),它们应该更精确但会产生更大的开销。他们的文档(here 和here)描述了他们将系统中断时间计数到最近的系统节拍(或 100ns 单位)。 QueryInterruptTime() 作为计时候选开始看起来不错,但很少有关于它的优点和怪癖的文档。
还有KeQueryInterruptTime() 和KeQueryInterruptTimePrecise(),我不知道他们和他们的“非柯”兄弟有什么不同。
谁能描述 QueryInterruptTime() 和 KeQueryInterruptTime(),它们的区别、优缺点,并将它们与更普遍的 QueryPerformanceCounter() 进行比较?
【问题讨论】:
-
这样的事情真的有要求吗?大多数游戏代码实际上并不需要知道“现在”的时间,而是关心帧实际呈现在屏幕上的时间。因此,您的游戏实际上关心计时器按照理想化的速率前进——这将提供最一致的用户体验——然后游戏循环以尽可能接近这个速率——可能使用 vsync 将帧传送到屏幕.
-
是的,没错,我只是在列举可能存在的选项,以便尝试找到一种 QPC 替代方案,它提供的开销更少,但足够强大,可以使用可接受的游戏时间。