我在MSDN上读到,尽管计时器不能保证以确切的间隔(在我的情况下为1秒)发射,但它们不会在间隔之前发射。。P>
一台PC上的计时器正常工作(Windows 7),而另一个PC(Windows Server 2003)都会发射每个0.99999936 seconds
。
我真的对为什么会发生这种情况感兴趣。
我注意到了这一点,因为我有代码计数秒为newSeconds = newSeconds + delta.Seconds
其中 delta
是 DateTime.Now - lastTime
秒部分在Windows 7上显示1
和Windows Server上的0
。
解决方案是仅阅读totalseconds
,但我仍然想知道为什么它在以前发射。
任何人都可以详细说明吗?
编辑
我实际上在两个不同的Windows 2003 PC上发生了这种情况。我想知道OS之间的区域更深入,是否有区别,.NET Framework 4在7 vs 2003中有所不同吗?还是人们可能知道的其他偏差?计时器如何实现,可能是与硬件有关的问题?
与此相对:c#计时器在间隔时间之前被触发我一直在每次滴答上都在发生。不需要长时间的运行。谢谢
编辑
public void OnTick(object sender, EventArgs e)
{
var delta = DateTime.Now - _lastTime;
DoStuff
_lastTime = DateTime.Now
}
此行:
newSeconds = newSeconds + delta.Seconds
可能并且可能会并且可能会越来越远离真正的措施。想象一下用码尺尺寸为1英里:您最终会漂移。
实际时间差异可能是事件开火和抓住时间之间少量时间的结果。这两个点之间必须有几个CPU周期。
我建议您使用反应性扩展。阅读此博客文章中的"全部与时间"。