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

时间:2010-08-19 10:38:12

标签: .net timer

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

是否有.net计时器可以执行此操作 - 我找不到一个?

我可以想到两个工作......

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

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

  3. 对这两种方法都不满意 - 第一种方法会对cpu施加不必要的负担(取决于解决方案的高度)。第二种方法可能会在很长一段时间后漂移。我不知道这是不是真的。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

如果这太多了,你需要一个雇用计时器,但要注意它们是你系统的负载。

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