【发布时间】:2020-08-27 04:09:27
【问题描述】:
秒表不是以 24 小时为间隔工作,而是以更短的时间间隔工作,例如分钟
Dim s1 As Stopwatch = New Stopwatch()
s1.Start()
'Dim starttime As String = DateTime.Now.ToString()
While s1.Elapsed < TimeSpan.FromHours(24)
End While
相同的代码可以正常工作 使用此方法时 TimeSpan.FromMinutes(1440) 代替 TimeSpan.FromHours(24)
【问题讨论】:
-
首先,这是可怕的代码。这就是所谓的“忙等待循环”,它是可能的最卑鄙的代码结构之一。永远不要使用不做任何事情来等待特定状态的循环。如果可能,请依赖事件。在这种情况下,如果您想等待 24 小时,那么您可以启动
Timer并将Interval设置为 24 小时。这不会完全精确,但非常接近。如果您需要更近的时间,请使用将近 24 小时的Interval,然后在第一个Tick之后将其更改为 1 秒。 -
如果您确实需要使用循环,那么您至少应该在其中设置睡眠/延迟,这样您就不会一直使用 100% 的 CPU。
-
至于问题,与报道的
Stopwatch无关。无论您使用TimeSpan.FromHours还是TimeSpan.FromMinutes,您仍然会生成TimeSpan,这就是您要与Stopwatch.Elapsed进行比较的内容。TimeSpan是TimeSpan,无论它是如何创建的。为了使比较在一种情况下而不是另一种情况下起作用,这两种TimeSpan方法必须产生不同的结果。除非你的系统坏了,否则它们不会。问题是另外一回事。你真的是在用一整天的时间来测试你的 CPU 吗?不好!
标签: .net vb.net setinterval stopwatch