可能重复:
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毫秒的差异和准确度有如此大的差异?
答案 0 :(得分:2)
您所看到的并不是准确性的差异,只是您选择了一个定时器间隔,其精度限制不太明显。
时钟以低于1000 Hz的频率运行。在你的系统上它似乎是大约70赫兹。如果您碰巧选择了在时钟之前触发的定时器间隔,您将看到一个小差异,但如果您有一个定时器间隔在时钟之后触发,它将在下一个时钟滴答时运行,并且您看到差异很大。