请问程序中如果有2个timer,第一个如果在忙,到时间第二个是否执行? ( 积分: 50 )

  • 主题发起人 主题发起人 asiancat
  • 开始时间 开始时间
A

asiancat

Unregistered / Unconfirmed
GUEST, unregistred user!
也就是说第一个timer和第二个timer之间是一个等待关系还是并行操作的关系?
 
应该是并行操作。
 
当然是并行操作了。
但如果其中一个在事件中卡死了,比如死循环了,那当然就无所谓响应了。
 
timer的触发是事件响应的,其实两个timer的代码都是在主线程中进行,所以一个timer忙另外一个消息是发的,但代码确不会执行。
 
2个timer没关系

至于一个忙,要看他的繁忙程度了,比如你的timer1要是隔1秒执行一次,但是每次执行需要3秒时间,那么timer1自己也不会每1秒都触发的,因为他造成了主进程的繁忙,自然timer2也就没办法定时触发了

但是如果timer1隔3秒触发一次,每次执行需要1秒,而在执行完了以后,主进程有没有执行其他操作时,timer2就会定时触发

其实timer事件也是通过消息实现的,你看下他的源码就知道了,一个API的回调函数而已
 
若某个Timer长时间占用处理器资源的话,其他的定时器Timer是无法获得响应的,一旦独占处理器的Timer向系统还复CPU资源,其他的定时器事件将会一起被处理的,因为,Windows是“事件模型”工作的。
一般地,如果某个Timer会很忙的话,可以有多种办法来转换CPU资源,将CPU交还给OS。方法有:
1、在程序代码中加入转让控制权的代码:application.procemessages;
2、定时器执行互斥:也就是说,对于执行耗时的Timer,有必要对它的每次操作进行互斥。就是指,保证执行耗时的Timer每一次执行完结后,才开始下一次处理;
 
多人接受答案了。
 
后退
顶部