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