C# 计时器不准确



我有一个函数,应该在特定间隔后发送信号,精确到 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 毫秒。

No.计时器根本不准确。这不是它的预期目的。这至少需要您设置为间隔的时间。

"问题"是:计时器运行的线程在滴答发生后停放。然后处理器需要做一些其他工作,并在一段时间后完成该工作并进行下一个滴答声。这就是为什么这样的计时器不准确的原因。

为了解决这个问题,您有时可以计算开始和现在之间的差异,并使用它而不是计算即时报价。

最新更新