他们都给出毫秒分辨率吗?
2 回答
不,它们没有毫秒精度。在大多数系统上具有 4 到 15 毫秒的精度clock
。精度在微秒到纳秒范围内。GetTickCount
QueryPerformanceCounter
clock
如果您使用的是 Microsoft 的 C 运行时库,则它是一个包装器GetTickCount
,如果您使用的是 MS 编译器,那么您可能就是。GetTickCount
返回一个以毫秒为单位的值,但在一毫秒过去后它不会增加一毫秒。它仅在系统时钟中断发生时递增,每 4 到 15 毫秒 - 通常约为 15 毫秒,但可以由应用程序更改。这会影响整个计算机:它会影响线程调度,而且更频繁的中断的开销也会减少实际运行程序代码的 CPU 时间,所以除非你真的需要,否则不要这样做。如果您的计算机的滴答声频率超过 15 毫秒,则其他一些应用程序修改了滴答声中断频率。
QueryPerformanceCounter
使用系统上可用的任何高分辨率计时器。过去,它通常基于处理器内部的时钟周期计数,因此会在 2-3GHz 或大约 0.5ns 下计数。不幸的是,一些处理器改变了计数器在低功耗状态下的计数速率,并且在多 CPU 系统(即具有多个处理器插槽)中,如果 CPU 的速度不同,您就会遇到问题。Windows 现在使用其他更可靠的来源,但它们的分辨率不如处理器那么高。QueryPerformanceFrequency
告诉您在一秒钟内发生了多少滴答声。要获得毫秒,请将 QPC 样本的差异乘以 1000,然后除以QueryPerformanceFrequency
.
clock
一个 C++ 函数。它返回自应用程序启动以来的CPU 滴答数。要将其转换为秒,请将其除以CLOCKS_PER_SEC
.
GetTickCount
一个 Win32 API 函数。返回自系统启动以来的毫秒数。
QueryPerformanceCounter
一个 Win32 API 函数。性能计数器是随时间增加的高分辨率计数器。要将其转换为秒,请将其除以QueryPerformanceFrequency
.