6

他们都给出毫秒分辨率吗?

4

2 回答 2

10

不,它们没有毫秒精度。在大多数系统上具有 4 到 15 毫秒的精度clock。精度在微秒到纳秒范围内。GetTickCountQueryPerformanceCounter

clock如果您使用的是 Microsoft 的 C 运行时库,则它是一个包装器GetTickCount,如果您使用的是 MS 编译器,那么您可能就是。GetTickCount返回一个以毫秒为单位的值,但在一毫秒过去后它不会增加一毫秒。它仅在系统时钟中断发生时递增,每 4 到 15 毫秒 - 通常约为 15 毫秒,但可以由应用程序更改。这会影响整个计算机:它会影响线程调度,而且更频繁的中断的开销也会减少实际运行程序代码的 CPU 时间,所以除非你真的需要,否则不要这样做。如果您的计算机的滴答声频率超过 15 毫秒,则其他一些应用程序修改了滴答声中断频率。

QueryPerformanceCounter使用系统上可用的任何高分辨率计时器。过去,它通常基于处理器内部的时钟周期计数,因此会在 2-3GHz 或大约 0.5ns 下计数。不幸的是,一些处理器改变了计数器在低功耗状态下的计数速率,并且在多 CPU 系统(即具有多个处理器插槽)中,如果 CPU 的速度不同,您就会遇到问题。Windows 现在使用其他更可靠的来源,但它们的分辨率不如处理器那么高。QueryPerformanceFrequency告诉您在一秒钟内发生了多少滴答声。要获得毫秒,请将 QPC 样本的差异乘以 1000,然后除以QueryPerformanceFrequency.

于 2011-03-01T14:44:33.053 回答
3

clock

一个 C++ 函数。它返回自应用程序启动以来的CPU 滴答数。要将其转换为秒,请将其除以CLOCKS_PER_SEC.

GetTickCount

一个 Win32 API 函数。返回自系统启动以来的毫秒数。

QueryPerformanceCounter

一个 Win32 API 函数。性能计数器是随时间增加的高分辨率计数器。要将其转换为秒,请将其除以QueryPerformanceFrequency.

于 2009-10-13T12:58:22.007 回答