QueryPerfomanceCounter返回的计数的时钟源是什么

时间:2009-11-13 19:49:02

标签: windows timer

我认为QueryPerformanceCounter实际上正在访问提供HPET(高性能事件计时器)的计数器---当然,不同之处在于HPET是一个计时器,当计数器值与所需间隔匹配时发送中断然而,为了使计时器“超出”QueryPerformanceCounter,你必须在软件中编写自己的循环。

我假设两者背后的硬件的唯一原因是同样的,因为我读过QueryPerformanceCounter正在访问芯片组上的计数器。

http://www.gamedev.net/reference/programming/features/timing/声称QueryPerformanceCounter使用的芯片组定时器显然具有指定的时钟速率。但是,我可以验证QueryPerformanceFrequency在不同的机器上返回截然不同的数字,事实上,从引导到引导,该数字可能略有不同。

返回的数字有时可能完全荒谬 - 暗示在纳秒范围内的蜱。当然,当把它放在一起时一切都有效;也就是说,使用QueryPerformanceCounter / QueryPerformanceFrequency编写计时器软件可以让你获得适当的时间和延迟非常低。

使用这些功能的软件定时器非常好。例如,间隔为1毫秒,超过30秒,几乎100%的刻度很容易落在预期间隔的10%范围内。如果间隔为100微秒,您仍然可以获得较高的成功率(99.7%),但最差的刻度可能会偏离(200微秒)。

我想知道HPET背后的时钟是否相同。据说HPET应该仍然可以提高准确性,因为它是硬件计时器,但到目前为止我还不知道如何在Windows中访问它。

2 个答案:

答案 0 :(得分:1)

听起来微软已经使这些功能使用“无论最好的计时器”:

http://www.microsoft.com/whdc/system/sysinternals/mm-timer.mspx

答案 1 :(得分:0)

您是否尝试更新AMD多核系统的CPU驱动程序?你有没有检查你的主板芯片组是否在“坏”列表中?您是否尝试设置CPU亲和力?

还可以使用基于RTC的时间函数和/或跳过检测启发式来消除QPC的麻烦。

这有一些提示:CPU clock frequency and thus QueryPerformanceCounter wrong?

请改进这一点。这是一个社区维基。