需要一个可靠的计时器,每秒触发192次事件

本文关键字:计时器 事件 192次 一个 | 更新日期: 2023-09-27 18:14:02

我已经尝试调度定时器,但它似乎不能正常工作。

我设置了tick事件,它在每个tick添加一个tick计数器,它只是没有正确地完成工作。我也有一个秒表来计算时间,但数字并不匹配。请让我知道什么样的解决方案将工作给我192个滴答每秒。

    Stopwatch sw = new Stopwatch();
    public DispatcherTimer dt = new DispatcherTimer();
    dt.Tick += dt_Tick;
    dt.Interval = TimeSpan.FromMilliseconds(1000/192);
    dt.Start();
    sw.Start();
void dt_Tick(object sender, EventArgs e)
{
    tick_textbox.Text = tick_counter.ToString();
    seconds_textbox.Text = sw.Elapsed.ToString();
    tick_counter++;
}

现在,我将其降低到每秒8次,这应该可以解决分辨率问题,但我使用TimeSpan的间隔得到了截然不同的结果。FromSeconds和TimeSpan。FromMilliseconds:

    dt.Tick += dt_Tick;
    dt.Interval = TimeSpan.FromSeconds(2 / 16);
    dt.Start();

vs。

    dt.Tick += dt_Tick;
    dt.Interval = TimeSpan.FromMilliseconds(2000 / 16);
    dt.Start();

那是什么原因?

需要一个可靠的计时器,每秒触发192次事件

您要求每5毫秒发生一次事件,而.NET计时器在此分辨率下根本不可靠

http://www.informit.com/guides/content.aspx?g=dotnet& seqNum = 815

摘自文章:

我从所有测试中得出的结论是,你最多可以指望计时器在其目标时间的15毫秒内滴答。计时器很少在目标时间之前滴答作响,而且我从未见过它提前超过一毫秒。最坏的情况似乎是计时器将在目标时间的30毫秒内滴答作响。用你想要的目标频率(即每100毫秒一次)计算最坏的情况,四舍五入到下一个15的倍数,然后加15。因此,如果没有非常沉重的CPU负载来阻止正常处理,100毫秒计时器将每99到120毫秒滴答一次

使用这些计时器,你绝对无法获得比15毫秒更好的分辨率。如果你想让某件事发生得更频繁,你必须找到不同的通知机制。没有。net定时器对象可以做到。

方法来获得这个分辨率,但它们通常涉及为高频定时应用和事件的驱动互操作设计的特定硬件。在使用声光调制器,激光源和CCD之前,我已经这样做了。