2010-10-01 29 views
0

我一直在嘗試用VB 2010創建一個計時器程序,精度爲0.05秒(如果可能,0.01秒)爲什麼我用VB寫的定時器程序不準確?

我在窗體(Timer1,Interval-50)中插入一個計時器。

當計時器滴答代碼:

intdsecond = intdsecond + 5 
    If intdsecond > 99 Then 
     intdsecond = intdsecond - 100 
     intsecond = intsecond + 1 
    End If 

    If intsecond > 59 Then 
     intsecond = intsecond - 60 
     intminute = intminute + 1 
    End If 

注:intdsecond,intsecond和intminute是用來記錄0.01秒,1秒和1分鐘的時間全局變量。

但是當我運行定時器1分鐘,記錄的時間是48.05秒

我怎樣才能讓我的定時器更準確?有什麼我對代碼做錯了嗎?

額外信息:我使用的是Windows 7,vb 2010,.Netframework 4客戶端配置文件。

回答

1

如果是這種System.Windows.Forms.Timer,這是不準確至50ms:

Windows窗體Timer組件是單線程的,並且被限制到55毫秒的精度。如果您需要更高精度的多線程計時器,請使用System.Timers名稱空間中的Timer類。

請參閱關於System.Windows.Forms.Timer文檔的註釋。

您可能還會考慮System.Diagnostics.Stopwatch。當時間間隔過去後它不會引發事件,但如果您關心的只是總時間,它確實提供了一些便利的屬性(例如ElapsedMilliseconds)。

+0

這就是我想要的。 1分鐘的誤差甚至不到0.5秒。謝謝。你解決了我的問題 – yihang 2010-10-01 04:02:44

0

你不應該寫你的計時器邏輯,期望間隔是完全精確的。有多種因素可以延遲計時器(線程優先級,代碼延遲等)。間隔越短,感知誤差就越大(50毫秒很短)。相反,您應該始終將當前時間與開始時間進行比較(預先存儲開始時間並與之比較)並將其用於顯示目的。

+0

我知道,但我沒想到錯誤會如此之大。差不多12秒。無論如何,你有什麼建議讓它更加準確(我仍然希望將它做成50ms)。提前致謝。 – yihang 2010-10-01 03:01:49

+0

@yihang,我以爲我確實推薦了一個解決方案,使它更加準確。 :)您應該將開始時間存儲在變量/字段中,並且**總是**在確定流逝時間時比較「DateTime.Now - startTime」。 – 2010-10-01 03:15:41

+0

是的,但是我沒有把我的問題弄清楚。我想要花費時間來顯示在標籤上,並經常刷新。所以,我認爲你比較開始時間和結束時間的方法不適用於我的情況。如果我不需要顯示器,你的方法將非常有用。無論如何,感謝您的幫助。 – yihang 2010-10-01 13:53:55

相關問題