win32多媒体定时器

本文介绍了Win32多媒体定时器,它提供高达1毫秒的精度,适用于需要精确时间控制的场景。创建定时器后,系统会周期性地向应用发送定时器消息。回调函数具有高优先级,甚至能影响Sleep函数的精度。当回调函数执行时间过长,可能导致定时器消息积压,系统会在短时间内连续调用回调,直至消息队列清空,恢复正常1ms周期。
摘要由CSDN通过智能技术生成

win32多媒体定时器


因为编程需要以1ms为周期调用一个函数,故在Windows平台上测试了一些定时器,并进行比较,最终选用timeSetEvent作为最终选项。
几个拉跨的定时器精度
select选择模型:15ms
Sleep(1) :15ms
Sleep(1) : 1-2ms //前提:在设置timeBeginPeriod(1)的情况下; // 设置精度为1毫秒
timeGetTime: 5ms
QueryPerformanceCounter:<1微秒 (win2000支持)
C++11 sleep_for(): 15ms
timeSetEvent(1): 0.95-1.05ms之间

精度达到1ms的定时器:多媒体定时器win95支持
原理分析:多媒体定时器被创建后,应用程序有一个定时器消息队列,系统以1ms(最高精度)的周期向程序发送定时器消息。当应用程序收到消息时,调用回调函数。此回调函数优先级非常高(最高),甚至可以将Sleep的精度压缩到1ms(通过屏蔽Sleep的方法)(普通线程为15ms,即便是将优先级拉到最高)。当回调函数的执行时间大于1ms (内部有如Sleep(1000))或者长耗时循环操作,会导致定时器消息积压,当挤压消失,系统会在1ms内多次(最高速度)调用回调函数 t<1ms,直到定时器消息队列为空,然后恢复1ms周期。

#pragma comment(lib,"winmm.lib")<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值