【问题标题】:Why AutoResetEvent WaitOne waits differently on my PC? [duplicate]为什么 AutoResetEvent WaitOne 在我的 PC 上等待不同? [复制]
【发布时间】:2021-02-26 22:11:24
【问题描述】:

我在控制台应用程序 (.net 4.5.2) 上做了一个小功能,以检查 AutoResetEvent.WaitOne 功能中超时的准确性。 在我的笔记本电脑上,等待时间几乎就是 WaitOne 的超时时间(右图)。 在我运行此测试的所有其他系统上,超时时间都更高(左图)。 我尝试更新 .net 但没有任何更改。

这种不同的行为是否与我的特殊硬件(联想 p52)有关,或者我正在使用 Visual Studio?

private static void WaitTest()
{
    try
    {
        using (var lResetEvent = new AutoResetEvent(false))
        {
            _stopwatch.Restart();
            lResetEvent.WaitOne(1);
            var l1Ms = _stopwatch.ElapsedMilliseconds;
            _stopwatch.Restart();
            lResetEvent.WaitOne(10);
            var l10Ms = _stopwatch.ElapsedMilliseconds;
            _stopwatch.Restart();
            lResetEvent.WaitOne(20);
            var l20Ms = _stopwatch.ElapsedMilliseconds;

            Console.WriteLine($"-----------------------------------------------------------");
            Console.WriteLine($" 1ms WaitTest: {l1Ms:D2}ms");
            Console.WriteLine($"10ms WaitTest: {l10Ms:D2}ms");
            Console.WriteLine($"20ms WaitTest: {l20Ms:D2}ms");
            Console.WriteLine($"-----------------------------------------------------------");
        }
    }
    catch (Exception lEx)
    {
        Console.WriteLine(lEx.ToStringEx());
    }
}

【问题讨论】:

  • 如果您指的是不同的延迟时间,您可能需要通过 Google 搜索 timeBeginPeriod 了解一些背景信息。
  • 我希望这与计时器粒度不是很好的原因相同 - 它基于系统时钟的准确性。但这在该文档中没有提到。 Timer.Interval 展示了如何测量准确性。
  • 您可以在 .NET 中精确测量经过的时间间隔,但是当您想在任意时间内什么都不做时,事情就不那么好了。无论您选择哪种方式,它都会非常不准确,而且您永远无法达到如此精确。

标签: c# .net console-application autoresetevent


【解决方案1】:

如果您指的是不同的延迟时间,您可能需要在谷歌上搜索 timeBeginPeriod 以获取一些背景信息。 – 500 - 内部服务器错误

引导我她: how to set timer resolution from C# to 1 ms?

这正在做这项工作:

 using (new TimePeriod(1))
    lResetEvent.WaitOne(WaitTime);

计时器分辨率似乎不会影响 AutoResetEvent。它总是在 15 毫秒左右:

        [DllImport("kernel32.dll", SetLastError = true)]
    static extern bool GetSystemTimeAdjustment(out long lpTimeAdjustment, out long lpTimeIncrement, out bool lpTimeAdjustmentDisabled);

【讨论】:

    猜你喜欢
    • 2014-10-23
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    相关资源
    最近更新 更多