VC++中,SetTimer 的1000ms时间间隔怎么就不能稳定是1000ms,跪求知者赐教!

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

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式