c#计时器不准确?

时间:2017-04-10 09:42:35

标签: c# visual-studio-2013 timer

我有一个函数应该在特定间隔后发送一个信号,精确到1毫秒(ms)。 但似乎我的计时器需要比他应该稍长的时间,即我将功能传递给TimeSpan 20ms,但计时器每个滴答需要30ms。我现在用Stopwatch写了一个计时器,但我仍然想知道为什么计时器需要更多时间来执行?

private System.Timers.Timer timer;

private void startResetTimer(TimeSpan time)
{
    timer = new System.Timers.Timer(time.TotalMilliseconds);
    timer.Elapsed += OnTimedEvent;
    timer.AutoReset = true;
    timer.Enabled = true;
}

private void OnTimedEvent(Object source, ElapsedEventArgs e)
{
    if (!waitForTimerReset.Set())
        Console.WriteLine("Could not wake up any threads!");
}

在我的代码中,计时器唯一执行的是waitForTimerReset.Set()方法,它允许线程在被ManualResetEvent停止后继续,这意味着此调用不应该花费10毫秒。

1 个答案:

答案 0 :(得分:7)

没有。计时器根本不准确。这不是它的预期目的。 至少将您设置为间隔的时间。

问题' is:定时器运行的线程在滴答发生后停止。然后处理器需要做一些其他工作,并在完成该工作一段时间后返回并进行下一次打勾。这就是为什么这样的计时器不准确。

要解决这个问题,你有时可以计算start和now之间的差异并使用它而不是计算滴答。