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