【问题标题】:Different timer accuracy when using different intervals [duplicate]使用不同间隔时的不同计时器精度[重复]
【发布时间】:2011-10-19 13:56:23
【问题描述】:

可能重复:
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

当我将我的滴答时间更改为 998(只有 2 毫秒不同!!!)我收到下一个:

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毫秒的差异,准确率差异如此之大?

【问题讨论】:

  • 提示:不要在问题标题中使用“WTF”,如果你想得到好的答案,一次只能使用一个问题或感叹号。
  • 您要做的相当于测量一块未知长度的木板用与木板尺寸大致相同的未知长度的尺子。显然,如果你这样做,你不会得到好的结果!要测量低精度计时器的精确不精确度,您需要使用高精度计时器使用秒表测量计时器的精度。

标签: c# .net timer


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 2018-07-08
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多