请教一下
如果我要在每分钟的第30秒左右执行一段程序,而且程序是长期运行的,要求每次都在30秒左右执行,那么要避免VB定时器的误差问题,我应该怎么办?
也就是有什么其他的高精度的记时器的.
如果用下面的代码,会不会出现漏掉某一次数据或在某一分钟内执行两次的情况呢?
现场机器要求长时间不关机, 设置了interval 为1000
Private Sub Timer1_Timer()
If Second(Now) = 30 Then
   DoSomething
End If
End Sub

解决方案 »

  1.   

    做什么样的东西要这样频繁的更新呢
    如果1min完成不了又打开了 这些问题都要考虑吧
      

  2.   

    如果这个程序不作其他占cpu时间的事,运行的时候其他程序也没有,就不会出现漏掉的情况。
    否则就说不清楚了。
      

  3.   

    用循环,引用sleep apiwhile true
       sleep(10000)
       If Second(Now) = 30 Then
         DoSomething
       End If
    wend
      

  4.   

    这个程序的计算结果需要实时输出,这程序在1min内完全可以计算完的,所以这方面应该不需要考虑.
      

  5.   

    我想和你的DoSomething有着直接的关系吧。要知道timer控件有个特点,就是下一次timer事件的触发是在前一次timer事件中的代码结束后才开始计时触发的。你的interval为1秒,如果你的DoSomething执行时间为2秒,那么实际上两次timer事件的间隔至少是3秒。如:Dim t As Single
    Dim s As Single
    Private Sub Timer1_Timer()
        Debug.Print Second(Now)
        t = Timer
        s = 0
        While s < 2
            s = Timer - t
        Wend
    End Sub也就是说,如果你的DoSomething过程执行时间超过1秒,那么If Second(Now) = 30 Then被错过的可能性是及大的。
    如果你的程序在计时上要求不是很高,大约30秒左右执行一次就行,可以有数秒的错误差,那么可以修改判断条件如If Second(Now) = 30 Then,并加一个变量来判断在时间超过30后是否执行过DoSomething,来避免这种情况的发生。