【问题标题】:Why my timer program written in VB isn't accurate?为什么我用VB写的定时器程序不准确?
【发布时间】:2010-10-01 02:21:23
【问题描述】:

我一直在尝试使用 VB 2010 创建一个精确到 0.05 秒(如果可能,0.01 秒)的计时器程序

我在表单中插入了一个计时器 (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.01s、1s 和 1min 时间。

但是当我运行计时器 1 分钟时,记录的时间是 48.05 秒

如何让我的计时器更准确?代码有什么我做错了吗?

额外信息:我使用的是 Windows 7、vb 2010、.Netframework 4 客户端配置文件。

【问题讨论】:

    标签: vb.net visual-studio-2010


    【解决方案1】:

    如果这是System.Windows.Forms.Timer,则不精确到50毫秒:

    Windows 窗体计时器组件是单线程的,精度限制为 55 毫秒。如果您需要更准确的多线程计时器,请使用 System.Timers 命名空间中的 Timer 类。

    请参阅System.Windows.Forms.Timer 文档中的备注。

    您也可以考虑System.Diagnostics.Stopwatch。当间隔过去时它不会引发事件,但如果您只关心经过的总时间,它确实提供了一些方便的属性(例如ElapsedMilliseconds)。

    【讨论】:

    • 这就是我想要的。 1分钟的误差甚至不到0.5秒。谢谢。你解决了我的问题
    【解决方案2】:

    您不应在编写计时器逻辑时期望间隔完全准确。有多种因素可以延迟计时器(线程优先级、代码中的延迟等)。间隔越短,感知到的错误就越大(50 毫秒非常短)。相反,您应该始终将当前时间与开始时间进行比较(预先存储开始时间并与之进行比较)并将其用于显示目的。

    【讨论】:

    • 我知道但我没想到错误会如此之大。几乎相差 12 秒。无论如何,你有什么建议让它更准确(我还是想把它设为 50 毫秒)。提前致谢。
    • @yihang,我想我确实推荐了一个解决方案,使其更准确。 :) 您应该将开始时间存储在变量/字段中,并在确定经过的时间时始终与它进行比较DateTime.Now - startTime
    • 是的,你做到了,但我的问题不够清楚。我希望经过的时间显示在标签上,并且经常刷新。因此,我认为您比较开始时间和结束时间的方法不适用于我的情况。如果我不需要显示器,您的方法将非常有用。无论如何,谢谢你的帮助。
    • @yihang,我特别希望你显示时间。为什么你认为这个解决方案行不通?
    • 您的意思是每隔 5 毫秒比较开始时间和当前时间,并显示经过的时间吗?之前没想到……
    猜你喜欢
    • 2015-10-28
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2012-12-28
    • 1970-01-01
    相关资源
    最近更新 更多