请教一下
如果我要在每分钟的第30秒左右执行一段程序,而且程序是长期运行的,要求每次都在30秒左右执行,那么要避免VB定时器的误差问题,我应该怎么办?
也就是有什么其他的高精度的记时器的.
如果用下面的代码,会不会出现漏掉某一次数据或在某一分钟内执行两次的情况呢?
现场机器要求长时间不关机, 设置了interval 为1000
Private Sub Timer1_Timer()
If Second(Now) = 30 Then
DoSomething
End If
End Sub
如果我要在每分钟的第30秒左右执行一段程序,而且程序是长期运行的,要求每次都在30秒左右执行,那么要避免VB定时器的误差问题,我应该怎么办?
也就是有什么其他的高精度的记时器的.
如果用下面的代码,会不会出现漏掉某一次数据或在某一分钟内执行两次的情况呢?
现场机器要求长时间不关机, 设置了interval 为1000
Private Sub Timer1_Timer()
If Second(Now) = 30 Then
DoSomething
End If
End Sub
如果1min完成不了又打开了 这些问题都要考虑吧
否则就说不清楚了。
sleep(10000)
If Second(Now) = 30 Then
DoSomething
End If
wend
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,来避免这种情况的发生。