VC++中,SetTimer 的1000ms时间间隔怎么就不能稳定是1000ms,跪求知者赐教!
图上是我程序导入数据库时截图时间,本来应该是SetTimer(0,1000,NULL);调用OnTimer消息函数执行0号事件,我在事件中加入了获取此刻系统时间,可是相邻...
图上是我程序导入数据库时截图时间,本来应该是
SetTimer(0, 1000, NULL);
调用 On Timer消息函数执行0号事件,我在事件中加入了获取此刻系统时间,可是相邻两次的时间间隔不是1000ms,而是大于1000ms,这是什么情况,恳请知者赐教解惑! 展开
SetTimer(0, 1000, NULL);
调用 On Timer消息函数执行0号事件,我在事件中加入了获取此刻系统时间,可是相邻两次的时间间隔不是1000ms,而是大于1000ms,这是什么情况,恳请知者赐教解惑! 展开
1个回答
展开全部
从VC的官方帮助MSDN中,我们可以了解到,定时器从来就不是一个精确的时间事件,它只是每隔一个毫秒数,发送一个WM_TIMER消息(发送的误差精度大致是50毫秒),放到窗口的消息队列中等待执行。
至于这个消息什么时候被执行,什么时候执行完成,都是不可控的。如果之前窗口有大量的消息或耗时太长的消息未处理完,1秒的定时器等10秒再执行,也是正常的。
你的情况,应该是执行事务较多,或定时器误差造成的,无法避免,属于系统允许的精度范围。
要获得更高精度,timeSetEvent 可以比WM_TIMER好很多,精度在1ms左右,用多线程做,基本可以实现1ms以内的精确执行。如果需要更高的精度,就需要在硬件上做文章了。
至于这个消息什么时候被执行,什么时候执行完成,都是不可控的。如果之前窗口有大量的消息或耗时太长的消息未处理完,1秒的定时器等10秒再执行,也是正常的。
你的情况,应该是执行事务较多,或定时器误差造成的,无法避免,属于系统允许的精度范围。
要获得更高精度,timeSetEvent 可以比WM_TIMER好很多,精度在1ms左右,用多线程做,基本可以实现1ms以内的精确执行。如果需要更高的精度,就需要在硬件上做文章了。
追问
谢谢!我现在执行的事务能够在1s的时间间隔完成,不过不能够正好是1s的时间来进行触发,产生的误差无法控制!我先来看看你说的timeSetEvent 。谢谢您的回答!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询