我用了一个Timer1控件,我把Timer1.Interval:=5000,也就是说五秒才触发一次Timer1Timer事件!但我在Timer1Timer事件用了sleep(5000);也就是说在执行这个事件的时候最少要5秒完成,按理来说Timer1Timer事件是应该十秒才触发一次的,但我观察了一下有时候是六秒触发,有时候是八秒触发.难道不是延时的5秒加Timer1本身设置的5秒,每十秒触发一次吗?麻烦那位高手能解释一下,小弟谢谢了!

解决方案 »

  1.   

    你对timer的理解有问题,sleep(5000),对于timer来说,定时5秒可能已经完成一轮了,自己想一想就会明白了
      

  2.   

    to bdmh 
    能不能详细些,万分感谢!
      

  3.   

    to bdmh 
       我想了一下是不是如果我sleep(10000)的话,那么timer在5秒后会另外建立一个线程并执行Timer1Timer事件,是这样吗?请告知谢谢!
      

  4.   

    timer是消息触发的,与它的事件有没有执行完是没有关系的
    除非你在事件开始关掉定时器,事件结束重新启动事件没执行完,新的消息得不到响应,有机会响应了,马上就会重新执行事件,所以。。
      

  5.   

    可能是由于前一个TimerProc处理用了过多的时间,而TimerProc中又没有及时用Application.ProcessMessage来接收来自消息队列的WM_TIMER消息,所以会造成不一致情况!
    此外WM_TIMER在消息队列中的优先级是比较低的,没办法保证准确性!
      

  6.   

    是否要先sleep前先关掉TIME。SLEEP后再打开