1

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

1-我可以通过超频 CPU 来增加计时器的分辨率(所以它的滴答声更快)?

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

4

3 回答 3

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

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

于 2012-06-12T11:58:02.490 回答
1

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

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

于 2012-06-12T12:46:33.530 回答
0

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

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

QPF 是 Microsoft 在 rdtsc 提供的内容上添加的包装器。阅读本文了解更多信息: http: //www.strchr.com/performance_measurements_with_rdtsc

于 2012-06-12T10:01:16.477 回答