多定时器冲突的问题????

时间:2021-03-22 18:11:30
我定义了两个定时器,用time1和time2表示,time1间隔60秒,time2间隔40秒,
如果time1的响应函数还没有执行完,而time2的时间到了的话,是否会响应time2的消息呢?
这时程序怎么执行呢?接下来两个定时器怎么计时呢???
谢谢!

7 个解决方案

#1


昏,你一个函数难道要执行20秒??

#2


sleep(2001);
^_^

#3


各自计时啊!
if(nIDEvent==1)
{

}
if(nIDEvent==2)
{

}

#4


需要定义不同的ONTIMER函数,在SetTimer时传进去。

#5


这个问题有意思,挺认真,并不可笑!
你设一个全局变量,用特定的值表示特定的执行状态,试一下吧,不过两者并行机会小有困难!

#6


我觉得如果在前一个OnTimer执行结束之前有新的WM_TIMER消息的话,这些后来的消息会合成一条,直到定时器函数执行结束。如果是两个定时器的话,相同ID的定时器合成一个吧。毕竟是低优先级的消息。

最好还是像楼上朋友说的,用不同的处理函数,在SetTimer时传进去吧

#7


首先要明确的一点是你的timer1和timer2是不是在同一个线程里。

1.在同一个线程里:
永远不可能同时响应2个OnTimer消息,这时如果在执行timer1的时候timer2的时间到了,系统只是把timer2的消息插入到消息队列里,但timer1肯定会先执行完才有可能响应timer2的消息处理。

2.在不同的线程里:
这个时候就有可能timer1还在处理的时候,timer1所在线程的时间片用完,转去执行timer2所在的线程。处理方法就是线程同步的问题了。可以利用关键代码段、事件、互斥体、信标等方法同步线程。

#1


昏,你一个函数难道要执行20秒??

#2


sleep(2001);
^_^

#3


各自计时啊!
if(nIDEvent==1)
{

}
if(nIDEvent==2)
{

}

#4


需要定义不同的ONTIMER函数,在SetTimer时传进去。

#5


这个问题有意思,挺认真,并不可笑!
你设一个全局变量,用特定的值表示特定的执行状态,试一下吧,不过两者并行机会小有困难!

#6


我觉得如果在前一个OnTimer执行结束之前有新的WM_TIMER消息的话,这些后来的消息会合成一条,直到定时器函数执行结束。如果是两个定时器的话,相同ID的定时器合成一个吧。毕竟是低优先级的消息。

最好还是像楼上朋友说的,用不同的处理函数,在SetTimer时传进去吧

#7


首先要明确的一点是你的timer1和timer2是不是在同一个线程里。

1.在同一个线程里:
永远不可能同时响应2个OnTimer消息,这时如果在执行timer1的时候timer2的时间到了,系统只是把timer2的消息插入到消息队列里,但timer1肯定会先执行完才有可能响应timer2的消息处理。

2.在不同的线程里:
这个时候就有可能timer1还在处理的时候,timer1所在线程的时间片用完,转去执行timer2所在的线程。处理方法就是线程同步的问题了。可以利用关键代码段、事件、互斥体、信标等方法同步线程。