参考: Option ExplicitPrivate mlNextTime As LongPrivate Sub Form_Load() mlNextTime = 0 Timer1.Interval = 1000 Timer1.Enabled = True End SubPrivate Sub Timer1_Timer() Dim lTemp As Long lTemp = Timer() If (lTemp >= mlNextTime) Then Print lTemp mlNextTime = lTemp + 5 ' 每5秒触发 'mlNextTime = lTemp + 20 ' 每20秒触发 ' 判断是否“跨0时” If (mlNextTime >= 86400) Then mlNextTime = mlNextTime - 86400 End If End Sub
实际上,楼主用的不是 Timer 控件。如果用 Timer 控件,根本不必考虑 Timer 函数的值,事件触发去处理就是了。Option Explicit Private n As LongPrivate Sub Form_Load() mlNextTime = 0 Timer1.Interval = 1000 Timer1.Enabled = True End SubPrivate Sub Timer1_Timer() n = n + 1 If n = 20 Then 'Do something n = 0 End If End Sub 楼主用的是 Timer 函数和循环操作。Dim lngNextTime As Long Dim blnStop As BooleanPrivate cmdRun_Click() blnStop = FalselngNextTime = Timer + 20 If lngNextTime >= 86400 Then lngNextTime = lngNextTime - 86400Do Until blnStop DoEvents 'Must check cross-midnight case to keep 20 seconds interval If ((lngNextTime <= 20) And (Timer <= 20) And (Timer >= lngNextTime)) Or ((lngNextTime > 20) And (Timer >= lngNextTime)) Then 'Do something lngNextTime = Timer + 20 If lngNextTime >= 86400 Then lngNextTime = lngNextTime - 86400 End If Loop End SubPrivate Sub cmdStop_Click() blnStop = True End Sub 实际上,楼主可以用 GetTickCount 函数来取代 Timer,从开机算起,可以持续计时 49.7 天,完全可以满足楼主的需求。需要注意的是,GetTickCount 函数返回值的单位是 ms。另外,如果采取了类似 Timer 函数跨子夜处理,用什么函数都可以无限期地进行下去。
Option ExplicitPrivate mlNextTime As LongPrivate Sub Form_Load()
mlNextTime = 0
Timer1.Interval = 1000
Timer1.Enabled = True
End SubPrivate Sub Timer1_Timer()
Dim lTemp As Long
lTemp = Timer()
If (lTemp >= mlNextTime) Then
Print lTemp
mlNextTime = lTemp + 5 ' 每5秒触发
'mlNextTime = lTemp + 20 ' 每20秒触发
' 判断是否“跨0时”
If (mlNextTime >= 86400) Then mlNextTime = mlNextTime - 86400
End If
End Sub
那干脆用这个timeGetTime吧,至少还能撑二十多天吧?
http://bbs.csdn.net/topics/390629856实在还不够就用那个QueryPerformanceCounter好了
Private n As LongPrivate Sub Form_Load()
mlNextTime = 0
Timer1.Interval = 1000
Timer1.Enabled = True
End SubPrivate Sub Timer1_Timer()
n = n + 1
If n = 20 Then
'Do something
n = 0
End If
End Sub
楼主用的是 Timer 函数和循环操作。Dim lngNextTime As Long
Dim blnStop As BooleanPrivate cmdRun_Click()
blnStop = FalselngNextTime = Timer + 20
If lngNextTime >= 86400 Then lngNextTime = lngNextTime - 86400Do Until blnStop
DoEvents
'Must check cross-midnight case to keep 20 seconds interval
If ((lngNextTime <= 20) And (Timer <= 20) And (Timer >= lngNextTime)) Or
((lngNextTime > 20) And (Timer >= lngNextTime)) Then
'Do something
lngNextTime = Timer + 20
If lngNextTime >= 86400 Then lngNextTime = lngNextTime - 86400
End If
Loop
End SubPrivate Sub cmdStop_Click()
blnStop = True
End Sub
实际上,楼主可以用 GetTickCount 函数来取代 Timer,从开机算起,可以持续计时 49.7 天,完全可以满足楼主的需求。需要注意的是,GetTickCount 函数返回值的单位是 ms。另外,如果采取了类似 Timer 函数跨子夜处理,用什么函数都可以无限期地进行下去。
直接就说句:用Timer控件,Interval设置了20000就是了。
用while做一个死循环,做完指定任务后暂停20000毫秒,然后从头再来。一样的效果。while(true)
;这里加入要做的事情。
Sleep 20000
Wend如果还要控制它暂停核继续的话,就在加上一个布尔开关什么的。
或者用另一个线程去做这个循环。毕竟线程是可以随意暂停和开始的。