QueryPerformanceCounter与QueryPerformanceFrequency
初始化 调用 调用 计算时间差,公式为: 频率转换:如果需要以微秒为单位输出,可以将 错误处理:在
发布日期:2025-05-05 14:30:25
浏览次数:3
分类:精选文章
本文共 1417 字,大约阅读时间需要 4 分钟。
在Windows操作系统中,实现高精度的计时器可以使用QueryPerformanceCounter和QueryPerformanceFrequency这两个函数。通过获取高精度计时器的频率和计数值,可以计算出非常精确的时间差。
基本原理
QueryPerformanceFrequency函数用于获取系统硬件支持的高精度计时器的频率。QueryPerformanceCounter函数则用于获取当前的计数值。通过获取计数器在使用这两个函数之前和之后的值,可以计算出时间差。具体步骤如下:
LARGE_INTEGER类型的变量来存储频率和计数器值。QueryPerformanceFrequency函数填充频率值。QueryPerformanceCounter函数获取当前的计数器值。dTime = dCount / dFrequency。具体实现
以下是一个详细的代码示例:
#includedouble PCFreq = 0.0;__int64 CounterStart = 0;void StartCounter(){ LARGE_INTEGER li; if (!QueryPerformanceFrequency(&li)) { cout << "QueryPerformanceFrequency failed!\n"; return; } PCFreq = double(li.QuadPart) / 1000.0; // 转换为秒 QueryPerformanceCounter(&li); CounterStart = li.QuadPart;}double GetCounter(){ LARGE_INTEGER li; QueryPerformanceCounter(&li); return double(li.QuadPart - CounterStart) / PCFreq;}int main(){ StartCounter(); Sleep(1000); // 等待1秒 cout << GetCounter() << "\n"; return 0;}
输出结果
运行上述代码后,输出结果应接近1秒,具体取决于系统的性能。
常见问题
PCFreq乘以1000000: PCFreq = double(li.QuadPart) / 1000000.0;
StartCounter函数中,检查QueryPerformanceFrequency返回值是否为FALSE,如果返回FALSE表示高精度计时器不支持,可能需要使用低精度计时器。注意事项
QueryPerformanceFrequency和QueryPerformanceCounter函数需要传递指针类型的LARGE_INTEGER,确保传入正确的内存地址。- 在多线程环境中,使用
QueryPerformanceCounter可能会遇到竞态条件,需要进行适当的同步。
通过以上方法,可以在Windows系统中实现高精度的时间计数,适用于需要极高精度的场景。
发表评论
最新留言
表示我来过!
[***.240.166.169]2026年06月19日 12时03分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
pip3命令全解析:Python3包管理工具的详细使用指南
2023-03-02
PIPE 接口信号列表
2023-03-02
pipeline配置与管理Job企业级实战
2023-03-02
pipeline项目配置实战
2023-03-02
Pipenv 与 Conda?
2023-03-02
QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
2023-03-02
pipy国内镜像的网址
2023-03-02
quiver绘制python语言
2023-03-02
pip下载缓慢
2023-03-02
PIP使用SSH从BitBucket安装自定义软件包,无需输入SSH密码
2023-03-02
pip在安装模块时提示Read timed out
2023-03-02
pip更换源
2023-03-02
SpringBoot之Banner源码深度分解
2023-03-02
Pix2Pix如何工作?
2023-03-02
QuickBI助你成为分析师——搞定数据源
2023-03-02
pkl来存储python字典
2023-03-02
quick sort | 快速排序 C++ 实现
2023-03-02