定时器与系统时钟同步引发事件

3

我想每5秒做一次工作。当我说每5秒时,我是指根据系统时钟在00:00、00:05、00:10、00:15、00:20等时间点执行,而不是从计时器启动开始的每5秒。

是否有.NET计时器可以实现这个功能 - 我找不到一个?

我能想到两种解决方法...

  1. 使用高分辨率计时器,并在每个计时事件中读取系统时钟。在每过整5秒后立即触发我的工作。

  2. 使用高分辨率计时器,并在每个计时事件中读取系统时钟。在每过整5秒后立即触发第二个计时器,该计时器的分辨率为5秒。

对于这两种方法都不满意 - 第一种方法会给CPU带来不必要的负担(取决于分辨率如何)。第二种方法可能会在很长时间后漂移。我不知道这是否正确。

2个回答

1

虽然不能直接设置,但你可以设置一个短定时器,在下一个5秒的倍数触发它,然后在事件处理程序中设置每5秒一次的计划。


1

所有常规的计时器(WinForms、线程、Timer)都有约20毫秒的分辨率。

您可以在单次模式下使用其中任何一个,并重新计算以毫秒为单位到达下一个5秒点的时间。预计误差为0..100毫秒。

如果这太多了,您将需要一个高精度计时器,但请注意它们会对您的系统造成相当大的负载。

但请注意,您的线程/进程随时可能被交换出N * 20ms。


如果我让计时器每5秒触发一次事件,它会不会最终漂移或者长时间内平均下来还好?由于线程的缘故,我不介意有些漂移,但只要在进程被换回时自行解决就可以了。 - flobadob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接