【发布时间】:2011-10-19 13:56:23
【问题描述】:
这是我的代码:
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”,如果你想得到好的答案,一次只能使用一个问题或感叹号。
-
您要做的相当于测量一块未知长度的木板用与木板尺寸大致相同的未知长度的尺子。显然,如果你这样做,你不会得到好的结果!要测量低精度计时器的精确不精确度,您需要使用高精度计时器。 使用秒表测量计时器的精度。