2010-08-19 66 views
3

我想每5秒钟做一些工作。根据系统时钟,当我每5秒钟说出00:00,00:05,00:10,00:15,00:20的意思。自定时器启动后不是每5秒钟一次。计时器与系统时钟同步上升事件

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

我能想到的两项工作变通的...

  1. 有一个非常高的分辨率计时器和读取系统时钟每个计时器事件。每完成5秒钟后,立即开始工作。

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

对任何一种方法都不满意 - 第一种方法会在CPU上带来不必要的负载(取决于分辨率有多高)。第二种方法可能会在很长时间后发生漂移。我不知道这是否属实。

回答

1

不是直接的,但你可以设置一个短计时器在接下来的5s倍数处触发,并且在那个事件处理器中设置每5秒计划。

1

所有通常的定时器(WinForms,Threading,Timer)都有〜20 ms的分辨率。

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

如果这太多了,您将需要一个雇用计时器,但请注意,它们对您的系统来说是相当大的负载。

但请注意,您的线程/进程可以在任何时刻换出N * 20ms。

+0

如果我让计时器继续运行,每5秒发生一次事件,它会最终漂移还是平均长时间运行?我不介意由于线程引起的一些漂移,但只要在进程交换回来的时候自行分类,那就没问题了。 – flobadob 2010-08-19 13:35:46