通过线程按一定间隔执行任务一定次数

本文关键字:执行任务 线程 | 更新日期: 2023-09-27 17:56:04

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

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

我不确定方法"A"是否应该通过 System.Timers.Timer 线程调用"B"(可以设置间隔,但不能设置次数),或者是否有更好的 (.NET 4) 方法来执行此操作。

非常感谢。

通过线程按一定间隔执行任务一定次数

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

多线程计时器的精度取决于操作系统,通常在 10–20 毫秒范围内。如果需要更高的精度,可以使用本机互操作并调用 Windows 多媒体计时器。这具有低至 1 毫秒的精度,并以 winmm.dll 定义。首先调用timeBeginPeriod通知操作系统需要高定时精度,然后调用timeSetEvent启动多媒体定时器。完成后,调用 timeKillEvent 停止计时器,调用 timeEndPeriod 通知操作系统不再需要高计时精度。您可以通过搜索关键字dllimport winmm.dll timesetevent在互联网上找到使用多媒体计时器的完整示例

-约瑟夫·阿尔巴哈里 ( http://www.albahari.com/threading/part3.aspx )

如果你听从他的建议,你应该得到你需要的精度。