.NET Timer 比 VB6 Timer 更可靠吗
在 VB6 的美好时光中,您不能依赖计时器控件来精确地按照指定的时间间隔触发。如果您的程序正在执行一些密集处理,则 Timer_Tick 事件会被推入堆栈,并且只有当它到达指令时才会被处理,这可能是几秒钟(?)之后。
所以我的问题是 - .NET 计时器控件是否已得到改进,以便可以可靠地按照指定的时间间隔触发?我想上面的内容仍然适用,不是吗?但它比 VB6 版本更好吗?
除了使用计时器控件之外,还有其他方法可以确保事件在指定的时间间隔后触发吗?
In the good old days of VB6 you could not rely on the timer control to fire at exactly the specified interval. If your program was doing some intense processing the Timer_Tick event is pushed onto the stack and only when it gets to the instruction is it processed, which may be some seconds(?) later.
So my question is - has the .NET timer control been improved such that this can be relied upon to fire at exactly the time interval specified? I guess the above still applies doesn't it? But is it any better than the VB6 version?
Are there any alternatives to using the timer control that ensure that an event fires after a specified interval?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(2)
计时器的问题在于它在某种意义上依赖于操作系统。计时器工作必须由操作系统安排,如果有另一个高优先级进程占用了大量处理能力,那么它可能会决定安排您的代码稍后运行,从而为另一项更重要的工作提供更多时间进步。
在大多数情况下,较新的计时器可能更可靠,但它们的可靠性取决于子系统。我不确定 Windows 是否实现了硬件计时器(更可靠),或者 .NET VB 是否使用它(如果有的话),但从我过去的工作经验来看,它似乎是时好时坏。大多数时候,它几乎在很小的范围内准确无误,而其他时候,我发现它在某些条件下延迟了长达一秒。
我的建议是不要使用睡眠并使用计时器,这样您就不会有太多问题。
PS:它以精确的时间间隔发生相对困难,通常会有几毫秒的差异,因此您不应该依赖非常非常精确的计时器粒度。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
System.Windows.Forms.Timer
在 UI 线程上运行并依赖于消息泵;它的工作原理与 VB6 定时器基本相同。但.NET 还有其他计时器 - System.Threading.Timer、System.Timers.Timer 在多线程环境中使用工作线程。
哪个“更好”取决于您的要求 - 使用多线程计时器可能会更接近于请求的间隔触发,但这是以使用线程固有的复杂性增加为代价的。
System.Windows.Forms.Timer
runs on the UI thread and relies on a message pump; it works essentially in the same way as a VB6 timer.But .NET has other timers -
System.Threading.Timer
,System.Timers.Timer
that use worker threads in a multi-threaded environment.Which is "better" depends on your requirement - using a multithreaded timer may fire more nearly at the requested interval, but this comes at the cost of the added complexity inherent in using threading.