C#定时器,每X秒触发一次,但与实时保持同步(即无漂移)
C#中是否有一个.NET计时器可以确保事件之间没有“漂移”?也就是说,如果您将计时器设置为每X秒关闭一次,则在运行数天后,计时器不会漂移,即确保一天中X秒事件的接近数与它应该的值保持同步C#定时器,每X秒触发一次,但与实时保持同步(即无漂移),c#,.net,timer,drift,C#,.net,Timer,Drift,C#中是否有一个.NET计时器可以确保事件之间没有“漂移”?也就是说,如果您将计时器设置为每X秒关闭一次,则在运行数天后,计时器不会漂移,即确保一天中X秒事件的接近数与它应该的值保持同步 如果没有,是否有一个众所周知的代码示例可以用C#包装一个计时器函数来实现这一点?我假设您已经尝试了一些东西,并且它会漂移 如果你想从一小时(5,10,15,20..)开始每隔5秒触发一次,你可以将计时器设置为触发一次,然后在回调中,将计时器重置为在DateTime触发。现在+秒数到下一个5秒间隔 这将防止任何漂
如果没有,是否有一个众所周知的代码示例可以用C#包装一个计时器函数来实现这一点?我假设您已经尝试了一些东西,并且它会漂移 如果你想从一小时(5,10,15,20..)开始每隔5秒触发一次,你可以将计时器设置为触发一次,然后在回调中,将计时器重置为在DateTime触发。现在+秒数到下一个5秒间隔 这将防止任何漂移,只要你的时钟是正确的 像这样的
System.Timers.Timer timer = new Timer();
void Init()
{
timer.Elapsed += timer_Elapsed;
int wait = 5 - (DateTime.Now.Second % 5);
timer.Interval = wait*1000;
timer.Start();
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer.Stop();
int wait = DateTime.Now.Second % 5;
timer.Interval = wait * 1000;
timer.Start();
}
很抱歉,只给你一个链接,但这是一个完全合格的,企业,测试。。。图书馆。。。你不需要重新发明轮子:) 如果你担心开销,你对开销的定义是什么?是文件大小(二进制文件约为0,5mb)还是逻辑中的开销。 逻辑部分:我认为实现他们的
IJob
-接口可以很好地强制消费者编写更好的代码。我不是内联方法的好朋友(举个例子,你可能会在计时器消失时触发它们的指针)——类会给你更多的可能性,并且再一次,强制更好的oop、域设计
但是:用quartz.net做
Console.WriteLine(…)
太过分了…:) 听起来不错-我想我在想,在.NET框架中是否还没有一个函数可以做到这一点,它会给一个小的WPF应用程序Andreas增加很多开销?i、 e.超越米凯尔给出的方法?(也就是说,在多大程度上使用大锤来敲开螺母?+1不知道这个库,但我一定会记住它。