【问题标题】:Timers raising events in sync with system clock定时器引发与系统时钟同步的事件
【发布时间】:2010-08-19 10:38:11
【问题描述】:

我想每 5 秒做一次工作。当我说每 5 秒时,我的意思是根据系统时钟在 00:00、00:05、00:10、00:15、00:20。自计时器启动后,并非每 5 秒一次。

是否有一个 .net 计时器已经可以做到这一点 - 我找不到?

我可以想到两种解决方法...

  1. 有一个非常高分辨率的定时器,并在每个定时器事件中读取系统时钟。每经过整整 5 秒后立即关闭我的工作。

  2. 有一个非常高分辨率的定时器,并在每个定时器事件中读取系统时钟。在整整 5 秒过后立即启动第二个计时器,其分辨率为 5 秒。

对这两种方法都不满意 - 第一种方法会给 CPU 带来不必要的负载(取决于分辨率有多高)。第二种方法可能会在很长一段时间后漂移。不知道是真是假。

【问题讨论】:

    标签: .net timer


    【解决方案1】:

    不是直接的,但您可以设置一个短计时器以在接下来的 5 秒倍数触发,并在该事件处理程序中设置每 5 秒的时间表。

    【讨论】:

      【解决方案2】:

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

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

      如果这太多了,您将需要一个招聘计时器,但请注意它们会给您的系统带来很大的负担。

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

      【讨论】:

      • 如果我让计时器运行,每 5 秒发生一次事件,它最终会漂移还是会在很长一段时间内平均化?我不介意由于线程导致的一点漂移,但只要在进程被换回时它会自行解决就可以了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2015-06-03
      • 2015-10-11
      相关资源
      最近更新 更多