计时器的内部工作

时间:2012-06-12 09:53:22

标签: c winapi timer

我知道QueryPerformanceCounter()可以用于计时功能。我想知道:

1 - 我可以通过超频CPU来增加定时器的分辨率(因此更快地打开)吗?

2 - 基本上是什么使一些定时器比其他定时器更精确(例如,与GetTickCount()相比,QueryPerformanceCounter()更精确?如果主板上有单晶振荡器,为什么有些定时器比其他定时器慢?

3 个答案:

答案 0 :(得分:3)

  1. QueryPerformanceCounter具有非常高的分辨率 - 通常小于1纳秒。我不明白你为什么要增加它。超频会增加它,但这似乎是超频的一个非常弱的原因。

  2. QueryPerformanceCounter非常准确,但有点昂贵且不太方便。
    一个。它很昂贵,因为它使用昂贵的rdtsc指令。更快的计时器只能从内存中读取整数。这个整数需要更新,我们不想经常这样做(每秒1000次是合理的),所以我们得到一个非常便宜的计时器,精度低。这基本上是GetTickCount 湾这很不方便,因为它使用在计算机之间切换的单元。有时它会是纳秒,有时是半纳米或其他值。这使得计算难度更大 一个。另一个不便之处在于它会返回非常大的数字,当您尝试使用它们进行数学运算时可能会溢出,因此您需要小心。

答案 1 :(得分:1)

QPC的定时源取决于机器。它通常从芯片组某处可用的频率中获取。是否对CPU进行超频会影响它,这在很大程度上取决于您的主板设计。最简单的方法是尝试它,使用QueryPerformanceFrequency来查看效果。

GetTickCount由完全不同的定时器源驱动,该信号也会产生时钟中断。它不是非常精确,通常为1/64秒,但它非常准确。您的机器会不时联系时间服务器以重新校准时钟并调整时钟校正因子。这使得它在整整一年中精确到大约一秒钟。 QPC非常精确,但不太准确。仅用于短时间间隔。

答案 2 :(得分:0)

1 - 是的,在内部,一个更好的计时器是rdtsc,它确实为你提供了时钟值。将此与来自cpuid指令的信息相结合,为您提供时间。

2 - 其他定时器依赖于各种定时源,例如8253定时器。

QPF是微软在rdtsc提供的内容中添加的包装器。阅读这篇文章了解更多信息: http://www.strchr.com/performance_measurements_with_rdtsc