为什么用VB编写的定时器程序不准确?

时间:2010-10-01 02:21:24

标签: vb.net visual-studio-2010

我一直在尝试使用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客户端配置文件。

2 个答案:

答案 0 :(得分:1)

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

  

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

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

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

答案 1 :(得分:0)

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