【发布时间】:2011-09-25 08:49:41
【问题描述】:
ETA:使用 Environment.TickCount 不会出现同样的问题。
ETA2:我应该补充一点,我实际上并没有在我的应用程序中使用 Forms.Timer - 因为这会
否定使用高频定时器。我在这里使用它来简化代码。
ETA3:我在下面发布了一个解决方法作为答案。
我在一台装有 XP 的笔记本电脑上观察到 StopWatch 类时遇到问题,但在另一台装有 Win7 的笔记本电脑上却没有。这是测试代码:
Public Class FormTest
Inherits Form
Private WithEvents Timer1 As System.Windows.Forms.Timer = New System.Windows.Forms.Timer
Private sw As Stopwatch = New Stopwatch
Public Sub New()
Me.Timer1.Interval = 1
End Sub
Protected Overrides Sub OnClick(ByVal e As System.EventArgs)
MyBase.OnClick(e)
Me.sw.Start()
Me.Timer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.Text = sw.ElapsedMilliseconds.ToString
Me.Update()
End Sub
End Class
在 Windows 7 上,每秒检查经过的毫秒数,我得到如下信息:
0、1010、2030、3005 ...
在 XP 上,我得到类似:0、200、306、390、512、...
也就是说,它很遥远。我们不是在谈论毫秒。 这与计时器是否为高分辨率无关,因为报告为真。作为 据我所知,这与处理器亲和力无关,因为我尝试将其设置为 2 个处理器中的每一个。
正如我所说,我认为这与 XP 有关,但也可能与不同的内核有关 - 然而,两台笔记本电脑都是英特尔的。
【问题讨论】:
-
您是在使用两台笔记本电脑还是在一台笔记本电脑上双启动?
-
我看不到你在哪里设置了
Timer1计时器的时间间隔? -
见鬼,粘贴后永远不要清理代码!我已经重新添加了部分。间隔是 1,对于 Forms.Timer,我认为相当于每秒大约 30 次。
-
@Mike 这是两台不同的笔记本电脑
-
定时器间隔精度受硬件和windows线程调度的限制。具有不同操作系统的两台机器之间可能会有很大的不同。
标签: c# .net vb.net timing stopwatch