windows - clock()、gettickcount()、QueryPerformanceCounter() 和 QueryPerformanceFrequency() 之间有什么区别?

标签 windows clock

它们都提供毫秒分辨率吗?

最佳答案

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

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

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

关于windows - clock()、gettickcount()、QueryPerformanceCounter() 和 QueryPerformanceFrequency() 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1559864/

相关文章:

windows - 如何将当前 Windows 凭据从使用 JS 制作的 Windows 8 native 应用程序传递到 WCF REST 服务?

linux - Windows 的 Shell 脚本模拟器

c++ - time.h clock() 在我的硬件上坏了吗?

jquery - 时钟选择器 : How to prevent click on input to open clockpicker

c - 尝试计算 C 中的算术运算时间时出现段错误

c - 如何在 Windows 上使用 C 将原始数据读写到 USB 驱动器

windows - findstr ms-dos 命令不会搜索子目录

c - Windows 操作系统中 Code::Blocks 编辑器中对 fork() 的 undefined reference

android - 初学者闹钟 - Android

c++ - 如何与程序的其余部分同时显示计时器?