我有一個虛擬軟件來測試秒錶在Visual Basic中的精確度。我被告知Visual Basic有一個很好的時機,但我正在經歷一些奇怪的行爲。TIMER或STOPWATCH在visual basic 2010中
這全是我的代碼:
Imports System.IO
Public Class Form1
Public tmrTime As New Stopwatch
Dim currentDate As Date
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
tmrTime.Start()
End Sub
Private Sub Form1_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
TextBox1.Text = (tmrTime.ElapsedTicks/Stopwatch.Frequency) * 1000
End Sub
Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
TextBox2.Text = (tmrTime.ElapsedTicks/Stopwatch.Frequency) * 1000
End Sub
End Class
問題對,如果我拿兩個文本框的非小數部分(這是迫切和ABS釋放的時間的絕對時間)。他們幾乎總是耦合在一起,即兩者都是奇數或偶數。
你知道發生了什麼?
我使用tmrTime.ElapsedMilliseconds或tmrTime.Elapsed.Ticks有同樣的結果: - \
肯定。代碼中的基本缺陷是,當您按下/釋放按鍵時,您不會測量事件處理程序何時開始運行。它由Windows中的調度算法來管理,代碼運行在非常規律的心跳上。 – 2013-02-27 18:34:33
謝謝,但是有什麼方法可以衡量按鍵何時被按下/釋放? – Vaaal88 2013-02-27 20:43:44
你必須調用GetLastInputInfo()。但是這是毫無意義的,消息時間戳的準確性只有16毫秒,並不比現在好。有很少的情況下,這是一個真正的問題。 – 2013-02-27 20:57:39