解決 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 Sub05/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.