使用不同间隔时,计时器精度不同

时间:2011-10-19 13:56:24

标签: c# .net timer

  

可能重复:
  inaccurate .NET timer?

这是我的代码:

System.Threading.Timer timer = new Timer((o) =>
    {
        Console.WriteLine(DateTime.Now.ToString("mm:ss:fff"));
    }, null, (1000 - DateTime.Now.Millisecond), 1000);

这是(大约)我在运行时收到的内容:

50:17:005
50:18:018
50:19:032
50:20:046
50:21:060
50:22:074
50:23:088
50:24:102
50:25:116
50:26:131
50:27:144
50:28:158
//and so on. Apparently there is a splice to 5-15 ms for each tick

当我将我的ticktime更改为998(仅2 ms不同!!!)时,我收到了下一个:

48:52:001
48:52:999
48:53:997
48:54:996
48:55:993
48:56:991
48:57:989
48:58:987
48:59:985
49:00:983
49:01:981
49:02:979
//and so on. Apparently that timer ticks almost perfectly!

我的问题是:为什么会出现这种行为?为什么只有2毫秒的差异和准确度有如此大的差异?

1 个答案:

答案 0 :(得分:2)

您所看到的并不是准确性的差异,只是您选择了一个定时器间隔,其精度限制不太明显。

时钟以低于1000 Hz的频率运行。在你的系统上它似乎是大约70赫兹。如果您碰巧选择了在时钟之前触发的定时器间隔,您将看到一个小差异,但如果您有一个定时器间隔在时钟之后触发,它将在下一个时钟滴答时运行,并且您看到差异很大。