gpt4 book ai didi

c# - 通过线程在一定时间间隔内执行任务一定次数

转载 作者:行者123 更新时间:2023-11-30 22:38:53 26 4
gpt4 key购买 nike

我对线程没有太多经验。我正在使用 .NET 4 并想使用 .NET 4 线程功能来解决这个问题。这就是我想要做的。

我有一个包含两种方法的类,“A”和“B”。我希望“A”每隔几毫秒(比如 3000)调用“B”几次(比如 100)。我想记录方法“B”执行 100 次(或其他次数)后的平均执行时间。该类将有一些私有(private)属性来跟踪“B”的总执行时间,以便计算平均值。

我不确定方法“A”是否应该通过 System.Timers.Timer 线程调用“B”(可以设置间隔,但不能设置次数)或者是否有更好的方法(.NET 4) 这样做的方式。

非常感谢。

最佳答案

在阅读您的问题时,我认为您的根本问题是关于安全地启动一组事件并以线程安全的方式对它们的执行进行计时。在您的示例中,您每 3000 毫秒运行 100 次迭代。这意味着最多每次迭代只需要 30 毫秒。不幸的是,System.Timers.Timer(它是带有包装器的 System.Threading.Timer)不是那么精确。期望精度最多为 10 毫秒,可能更差。为了获得您真正需要的 1 毫秒精度,您将需要利用 native 互操作性。这是我在这方面找到的引述:

The precision of multithreaded timers depends on the operating system, and is typically in the 10–20 ms region. If you need greater precision, you can use native interop and call the Windows multimedia timer. This has precision down to 1 ms and it is defined in winmm.dll. First call timeBeginPeriod to inform the operating system that you need high timing precision, and then call timeSetEvent to start a multimedia timer. When you’re done, call timeKillEvent to stop the timer and timeEndPeriod to inform the OS that you no longer need high timing precision. You can find complete examples on the Internet that use the multimedia timer by searching for the keywords dllimport winmm.dll timesetevent

-Joseph Albahari ( http://www.albahari.com/threading/part3.aspx )

如果您遵循他的建议,您应该可以获得所需的精度。

关于c# - 通过线程在一定时间间隔内执行任务一定次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5952531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com