C#计时器在间隔时间之前被触发

C#计时器在间隔时间之前被触发,第1张

概述在 Windows服务中使用System.Threading.Timer(.NET 2.0)时,我们会遇到以下问题. >有大约12个不同的定时器对象.. 每个定时器都有到期的时间和间隔.这样设置正确. >观察到3〜4小时后,定时器在其间隔过去之前开始发信号.例如,如果计时器应该在4:59:59发出信号,那么在7点钟前的4:59:52发出信号. 有人可以告诉我这个行为的原因是什么? 谢谢, 斯瓦特 在 Windows服务中使用System.Threading.Timer(.NET 2.0)时,我们会遇到以下问题.

>有大约12个不同的定时器对象..
每个定时器都有到期的时间和间隔.这样设置正确.
>观察到3〜4小时后,定时器在其间隔过去之前开始发信号.例如,如果计时器应该在4:59:59发出信号,那么在7点钟前的4:59:52发出信号.

有人可以告诉我这个行为的原因是什么?

谢谢,
斯瓦特

解决方法 很好的问题…这就是原因:

“计时”是一个棘手的事情,当涉及到电脑…你永远不能依靠“间隔”是完美的.有些电脑每隔14到15毫秒就会“勾选”定时器,比一般的频率要少一些.

所以:

Thread.Sleep(1);

可能需要1到30毫秒的时间运行.

相反,如果你需要一个更精确的计时器 – 你必须捕获你开始的DateTime,然后在你的计时器中,你将不得不通过减去DateTime.Now和你的原始时间来检查是否“运行时间”你的代码

以下是您需要做的一些示例代码:

DateTime startDate = DateTime.Now;

然后,启动您的计时器,间隔设置为1毫秒.然后,在你的方法:

if (DateTime.Now.Subtract(startDate).TotalSeconds % 3 == 0){    // This code will fire every 3 seconds.}

上面的代码将每3秒钟忠实地发射.你可以让它运行10年,它仍将每3秒触发一次.

总结

以上是内存溢出为你收集整理的C#计时器在间隔时间之前被触发全部内容,希望文章能够帮你解决C#计时器在间隔时间之前被触发所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1237457.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存