我一直在尝试使用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客户端配置文件。
答案 0 :(得分:1)
如果这是System.Windows.Forms.Timer
,则不准确到50毫秒:
Windows窗体计时器组件是单线程的,精度限制为55毫秒。如果需要更高精度的多线程计时器,请使用System.Timers命名空间中的Timer类。
请参阅System.Windows.Forms.Timer文档的备注。
您可能还会考虑System.Diagnostics.Stopwatch。当间隔过去时,它不会引发事件,但如果你关心的只是总的经过时间,它确实提供了一些方便的属性(例如ElapsedMilliseconds
)。
答案 1 :(得分:0)
您不应该编写计时器逻辑,期望间隔完全精确。有许多因素可以延迟计时器(线程优先级,代码中的延迟等)。并且间隔越短,感知错误越大(并且50毫秒非常短)。相反,您应该始终将当前时间与开始时间进行比较(预先存储开始时间并与之进行比较)并将其用于显示目的。