以前做上层程序的时候,需要计时的时候就GetTickCount()获取当前ms来做个减法,如果有Timer需求,那肯定直接SetTimer,OnTimer,KillTimer三件套。最近遇到了一个要求发送频率50Hz,直接SetTimer将间隔设置为20,结果发现数据间隔差的离谱。查了一下,GetTickCount和Timer都是基于Windows消息循环,最小单元为55ms左右。如果想实现更高的精确度:
精确获取时间
QueryPerformanceFrequency() - 基本介绍
类型:Win32API
原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
作用:返回硬件支持的高精度计数器的频率。
返回值:非零,硬件支持高精度计数器;零,硬件不支持,读取失败。
QueryPerformanceFrequency() - 技术特点
供WIN9X使用的高精度定时器:QueryPerformanceFrequency()和QueryPerformanceCounter(),要求计算机从硬件上支持高精度定时器。需包含windows.h头文件。

在Windows中,使用GetTickCount和SetTimer进行计时可能会存在精度问题,因为它们依赖于消息循环,最小间隔约为55ms。为了实现更高精度的计时,可以利用QueryPerformanceFrequency和QueryPerformanceCounter这两个Win32API函数,它们基于硬件的高精度计数器。这些函数可以帮助获取纳秒级别的计时,适合需要精准时间间隔的场景。此外,文章还提到可以通过多媒体库的函数来创建精准Timer。
最低0.47元/天 解锁文章
1288

被折叠的 条评论
为什么被折叠?



