解決 Timer 函數的潛在危險 (原始碼下載)

本站之前有提到,如果要延遲程式執行,可以用 Timer 函數來達成,例如要延遲五秒可以這樣寫:(關於如何延遲程式執行,請參考本站的 三種延遲程式執行的方法。)

註:以下三個程式為了示範 Timer 是否會進入無窮迴圈的效果,將會改變系統時間,執行完畢請自行改回正確時間和日期,不便之處,敬請見諒。

Private Sub Command1_Click()
     Time = #11:59:57 PM#
     Dim BeginTime As Single
     BeginTime = Timer
     Do While Timer - BeginTime < 5
     Loop
End Sub

但是仔細想想,Timer 是傳回自午夜 (00:00:00) 以來所累積的秒數,所以如果BeginTime=86397,那麼這個程式將會進入無窮回圈(如上例),因為 Timer 的最大值不可能超過 86400,解決的辦法是將該判斷式 Normalize,程式碼如下所示:

Private Sub Command2_Click()
     Time = #11:59:57 PM#
     Dim BeginTime As Single
     BeginTime = Timer
     Do While (Timer - BeginTime + 86400) Mod 86400 < 5
     Loop
End Sub

05/26/1999補充:

另一種解決這種問題的方式是使用絕對時間的 Timer 函數 myTimer:

Private Sub Command3_Click()
     Time = #11:59:57 PM#
     Dim BeginTime As Double
     BeginTime = myTimer
     Do While myTimer - BeginTime < 5
     Loop
End Sub

關於 myTimer 函數,請參考本站的 自製絕對時間的 Timer 函數


[ 上一個 | 首頁 | 重要觀念 | 下一個 ]

This page was written by Jaric on Apr. 25, 1998. All rights reserved.

Revised : May. 26, 1999

Total pageview since 4/6/1999.