timeBeginPeriod 高精度定时器 Sleep
1.timeBeginPeriod 与sleep配合使用实现高精度
#include "timeapi.h" #pragma comment(lib, "winmm") // DWORD __stdcall ThreadTest(LPVOID pThreadParam) { CLog mLog; int i = 100; timeBeginPeriod(1);//1表示1ms精度 while (i--) { mLog.WriteLog("%d", i); Sleep(1000); } timeEndPeriod(1); return 0; }
测试结果,不使用timeBeginPeriod 的Sleep精度是15ms,使用timeBeginPeriod 的Sleep精度是3ms
sleep本身的误差无法避免,虽然精度设置了1ms但无论sleep(1000)还是sleep(10) 总会有3ms误差
缺点:大幅提高了cpu占用率
2.另一个高精度的sleep函数
//休眠指定毫秒数 void MSleep(long lTime) { LARGE_INTEGER litmp;//64位有符号整数 LONGLONG QPart1, QPart2; double dfMinus, dfFreq, dfTim, dfSpec; QueryPerformanceFrequency(&litmp); dfFreq = (double)litmp.QuadPart; QueryPerformanceCounter(&litmp); QPart1 = litmp.QuadPart; dfSpec = 0.001*lTime; do { QueryPerformanceCounter(&litmp); QPart2 = litmp.QuadPart; dfMinus = (double)(QPart2 - QPart1); dfTim = dfMinus / dfFreq; } while (dfTim < dfSpec); }
//使用时直接调用就可以了
MSleep(1000);//休眠1秒
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2021-02-23 MFC vc++ 写 word 文件,使用MSWORD.OLB