代码之家  ›  专栏  ›  技术社区  ›  flobadob

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

  •  3
  • flobadob  · 技术社区  · 14 年前

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

    有没有一个.net计时器可以这样做-我找不到?

    1. 有一个非常高分辨率的定时器和读取系统时钟的每个定时器事件。每过5秒,我就立刻停止工作。

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

    2 回复  |  直到 14 年前
        1
  •  1
  •   Richard    14 年前

    不是直接的,但是你可以设置一个很短的计时器在下一个5s的倍数触发,在这个事件处理程序中设置每5s的时间表。

        2
  •  1
  •   Henk Holterman    14 年前

    所有常用的计时器(WinForms、线程、计时器)的分辨率都是~20ms。

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

    如果这是太多,你将需要一个雇用定时器,但要知道,他们是一个相当大的负荷对你的系统。

    但是请注意,您的线程/进程可以随时换成N*20ms。