VC 多个SetTimer 执行时的机制问题

设定了多个SetTimer,当前一个OnTimer执行还没有结束的时候又有多个定时到达,这时候程序是怎样执行的?另外下面两段话讲的一样吗?这中间的处理过程要怎么理解?On... 设定了多个SetTimer,当前一个OnTimer执行还没有结束的时候又有多个定时到达,这时候程序是怎样执行的?

另外下面两段话讲的一样吗?这中间的处理过程要怎么理解?

OnTimer()内部正在进行大量的处理,但没有调用任何可能把控制权交还给Windows的函数,那么第二个WM_TIMER消息将被保留在程序的消息队列之中。如果因为OnTimer()迟迟不能返回,最后导致第三个、第四个甚至更多的WM_TIMER消息也到来了,此时后面来的WM_TIMER消息将会冲掉前面的WM_TIMER消息,也即消息队列中只保留最后一条WM_TIMER消息,其余的都被丢弃了,这与WM_PAINT消息是类似的。
展开
 我来答
bhtzu
2012-12-13 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4254万
展开全部
定时器确实是这个运行机制,所以需要准确事件间隔和并发的处理,通常都是使用线程来做,而不是定时器。
理解这个首先要明白消息机制,WM_TIMER首先是消息队列的处理,符合消息队列的基本原则。
其次,当消息队列产生“拥挤”的时候,是有“抛弃”机制的,而这个机制是交给定时器来处理(而不是win消息队列)。
如果定时处理大量工作,而且每次必须执行,一般可以采用定时器抛出消息的办法,即OnTimer里面PostMessage(注意不能是SendMessage)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式