2011-10-19 84 views
-2

可能重复:
inaccurate .NET timer?不同的定时器精度不同的时间间隔

这里是我的代码:

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

这里是(approximatly)我收到的时候它运行:

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

+3

内容丰富的主题FTW。 – Gerry

+3

提示:不要在问题标题中使用“WTF”,并且如果您想要很好的答案,则一次仅使用一个问题或感叹号。 – jgauffin

+2

你想要做的是相当于测量长度未知的电路板*,尺寸与电路板*尺寸相同,尺寸未知。显然,如果你这样做,你不会得到好的结果!要测量低精度定时器的准确不精确度,您需要使用*高精度定时器*。 **使用秒表来测量定时器的精度。** –

回答

2

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

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

相关问题