【发布时间】:2013-02-27 18:17:38
【问题描述】:
我有一些虚拟软件可以在 Visual Basic 中测试秒表的精度。有人告诉我,Visual Basic 的时机非常好,但我遇到了一些奇怪的行为。
这是我的全部代码:
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
问题在于,如果我采用两个文本框的非小数部分(即按下的绝对时间和释放的绝对时间),它们几乎总是耦合的,即奇数或偶数。
你知道发生了什么吗?
我使用 tmrTime.ElapsedMilliseconds 或 tmrTime.Elapsed.Ticks 得到相同的结果:-\
【问题讨论】:
-
当然。代码中的基本缺陷是您没有测量按下/释放键的时间,而是测量事件处理程序何时开始运行。它由 Windows 中的调度算法控制,代码以非常规律的心跳运行。
-
谢谢,但是有什么方法可以测量何时按下/释放键?
-
你必须 pinvoke GetLastInputInfo()。但这毫无意义,消息上时间戳的准确性只有 16 毫秒,并不比你现在的好。在极少数情况下这是一个真正的问题。
-
我正在测量反应时间,其中毫秒的微小差异很重要。您认为使用不同的线程作为计时器可能有用吗?
标签: vb.net timer timing stopwatch