VB Timer時鐘的準確性

Timer控件的使用 
 
VB編程過程中,通過引發Timer事件,Timer控件可以有規律地間隔一段時間執行一次代碼。Interval屬性是Timer控件最重要的一個屬性,它以千分之一秒爲單位指定Timer事件之間的間隔,理論上可以認爲最少可設置爲1毫秒觸發一次Timer事件,另外一個重要屬性是Enabled屬性,它決定計時器是否開始工作。因爲Timer控件響應時間的流逝,獨立於用戶,可以成爲編程者的“好幫手”,所以在實踐中很受歡迎,但編程者特別是初學者在實際使用過程中往往會感覺到“力不從心”,下面筆者將通過分析並結合自己的編程體會談談Timer控件使用中的幾個誤區。

1. 編程中過於相信Interval屬性值的準確性

這是初學者易犯的錯誤,其實Interval屬性值只是一個參考值,其準確性低,因而間隔不一定準確。Timer控件是基於Windows消息WM_TIME的時鐘脈衝發生器,系統每秒生成18個時鐘信號,所以即使用毫秒衡量Interval屬性,間隔的實際精度不會超過1/18秒,換句話說,Timer控件能夠精確設置的最短時間是65.6毫秒,如果要使時間間隔更精確,應讓定時器檢查系統時鐘。

2. Interval屬性的取值範圍

Interval屬性的有效值在0至65535之間,這就意味着即使最長時間間隔也只是65.6秒,比一分鐘長不了多少,而且VB只有在Interval屬性值大於0時,纔會產生Timer事件,這是要特別注意的地方。

3. Timer控件的功能定位出錯

Timer事件是週期性的,Interval屬性主要是決定“多少次”而非“多久”,所以一般不用於計時,而是用做計數。筆者曾做過實驗,把Interval值分別設爲1000和60000,即把間隔時間分別設爲一秒鐘和一分鐘,做成一個計時器,並把工作結果和系統標準時間比較,誤差分別是6.7%和1.7%,可見定時器事件生成越頻繁,響應事件所用的處理越多,越將降低系統綜合性能,從而導致誤差增大,這麼大的誤差顯然失去了用做計時的意義。

4. 計數器變量的聲明錯誤

在設計計數器時最易犯的錯誤是不聲明變量或在區域變量中聲明。將Interval屬性設爲1000,看看下面這個程序:

Private Sub Timer1_timer()

Dim i as integer

i=i+1

print i

End Sub

也許有讀者可能想通過這段程序,能打印出1,2……n,而事實上只能打印出1,1……1來,原因在於每個時間間隔內,按順序運行的Timer事件是彼此互不相干的,如將變量i聲明爲區域變量,每次程序一運行完,此變量即告完成任務,因此顯示的永遠是1,如在程序中將i聲明爲公用變量,此變量存儲的值就會一直保留下來。

以上幾點只是筆者在當前系統環境下的粗淺認識,可以想見,隨着硬件和軟件環境的不斷改善,將會出現更加精確的Timer控件。

 

http://www.vbgood.com/vb.good/article-do-view-articleid-3591.html

發佈了46 篇原創文章 · 獲贊 16 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章