各位大侠:
   我在编程时发现当几个timer同时工作时,会有一个timer的enable已经为
true 了可时间早过就是不触发Ontime事件。而当其他几个timer中的任意一个停下后,该timer又可正常工作了。同时工作的共有4个timer,一个为主扫描,其他几个执行某项功能的timer,出问题的就是其中之一。pls help me,

解决方案 »

  1.   

    没有代码,让大家很难帮你,应该是你程序的问题。
    一点经验,触发事件的时候,不要用=,而应该用>=,不知道你的程序在timer控件的timer事件中是否利用了=进行判定,如果有的话,换成>=试试
      

  2.   

    首先你要明白一点,Timer控件是很费系统资源的,所以同时有多个Timer控件同时运行时,就可能出现问题,你的问题也很好解决,只要把所有的Timer控件的Interval属性设置的低一些就可以了,如:有5个Timer控件,它们的Interval=1,那你不防试着把它们的Interval设置成50或更低(看你的机器的好坏而定,所以没有固定值,自己试一下就可以了).
      

  3.   

    在timer事件中加入doevents,我估计十有八九是因为VB的单线程闹的。不过要善用doevents,没必要的地方(比如速度比较快,可以忽略不计的地方)不要乱加,以免其他错误的产生。还有就是对于那些需要长时间处理的timer中加入doevents的话,一定要在timer事件的一开始将这个timer设置为disable,否则,很容易造成这个进程的重入。
      

  4.   

    very thanks,一直住在公司的寝室里,这几天下雨回不来,今天才有机会上网,
    我觉得不像程序的问题,timer里面没有什么判断的,我用text可以清楚的显示timer
    的timer的enable=true,可就是不触发ontime. 我想问问一个timer的enable不断变换true和false会不会影响其他的timer工作。tomorrow,我去公司拭式Fsoft和AresChen
     
      

  5.   

    其实上面几为都说多点子了
    你的问题是vb单线程所致
    当你让timer = true实际上是
    SetTimer(me.hwnd,,)了, 这样
    如果系统空闲的时候。检测消息循环,发现了WM_TIMER消息则执行timer_ontimer事件
    如果别的time站用了时间(比如长时间的循环),让系统没时间获取消息循环。则取出来的时间有差别。所以必须到别的time的循环中加入doevents 但这样会导致别的time的重入。所以
    一般在timer_ontimer事件中的开头和结尾都需要加入 time1.enable = false
    time1.enable = true
    顺带:其实time1本身就会处理该操作。 他在你退出sub的时候,会执行KillTimer 和 SetTimer 函数
    可以做个实验。在系统空闲的时候
    time的间隔是1s。第一次time里面执行了0.5s. 到第2次time执行的间隔则为1.5s. 而不象API
    恒定1s发送一个WM_TIMER消息(如果消息队列中还有WM_TIMER消息,则不发送,所以系统空闲的时候,2次时间间隔是1s的整数倍) 而加time1.enable=false 其实也就是KillTimer,而执行完毕timer1.enable = true 也就是SetTimer,下次定时候从这个时间算起
    所以在Timer_ontimer事件中.加上述语句不会影响时间.
      

  6.   

    我觉得问题越来越有趣,我渴望了解有设么因素会使一个timer去影响另一个timer,
    有必要先将我的问题再详细描述一下:
    我有4个timer同时工作,timer1,timer2,timer3,timer4.
    timer1主循环其中有4个耗时的通讯子程序(是用查询所以费时)interval=10
    timer2中有1个耗时的通讯子程序interval=300
    timer3,timer4中只是起延时的作用interval=1000,时间到后置一个标志
    运行时,
    timer1正常运行,通讯绝对顺畅timer1中耗时估计150-200ms
    (用通讯字节理论上计算timer1运行7-8次/s,实际5-6次/s)
    timer2运行时,我故意使timer2中预定任务无法完成,迫使timer2不断重新启动
    试图完成任务。
    这时就出现了问题,
    当timer3,timer4的enabled=true,可是只有timer4可以不断启动来完成延时任务 
    可timer3却僵在那,enabled=true,却不置标志。
    只有当timer2成功完成通讯工作停止后,或是timer4完成所有的延时任务停止,
    timer3才恢复工作。
    经楼上大侠的指点
    看来在timer_ontimer事件中的开头要加入timer1.enable = false
    是很重要的。(我的timer2中可能没加)
    但我不太明白,timer都有interval,为设么“如果别的time站用了时间(比如长时间的循环),让系统没时间获取消息循环。请大侠指教