【问题标题】:TIMER or STOPWATCH in visual basic 2010Visual Basic 2010 中的 TIMER 或 STOPWATCH
【发布时间】: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


【解决方案1】:

这里有一篇关于.Net 中秒表/计时器精度的好文章on a MSDN blog。如果我正确理解您想要做什么,这应该可以解决您的问题:

Public Class Form1
    Private _sw As New Stopwatch

    Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
        _sw.Start()
    End Sub

    Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp
        Dim elapsed As Long
        elapsed = _sw.ElapsedTicks
        _sw.Stop()
        tbTicks.Text = (elapsed / Stopwatch.Frequency) * 1000
        _sw.Reset()
    End Sub
End Class

【讨论】:

    【解决方案2】:

    Georg 发布的代码需要升级:

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.KeyPreview = True
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 2013-08-05
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多