【发布时间】:2010-12-06 07:15:14
【问题描述】:
它们都给出毫秒分辨率吗?
【问题讨论】:
-
文档是怎么说的?
它们都给出毫秒分辨率吗?
【问题讨论】:
不,它们没有毫秒精度。 clock 和 GetTickCount 在大多数系统上的精度在 4 到 15 毫秒之间。 QueryPerformanceCounter 的精度在微秒到纳秒的范围内。
clock 是 GetTickCount 的包装器,如果您使用的是 Microsoft 的 C 运行时库,如果您使用的是 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。
【讨论】: