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

时间:2011-05-10 15:29:41

标签: c# multithreading

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

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

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

非常感谢。

1 个答案:

答案 0 :(得分:3)

在阅读您的问题时,我认为您的根本问题是安全地开始一组事件并以线程安全的方式计算其执行时间。在您的示例中,您每3000毫秒运行100次迭代。这意味着每次迭代最多只需要30ms。不幸的是,System.Timers.Timer(带有包装器的System.Threading.Timer)并不那么精确。预计精度最高可达10毫秒,可能更糟。为了获得您真正需要的1ms精度,您将需要利用本机互操作。以下是我在此发现的一句话:

  

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

     

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

如果你遵循他的建议,你应该得到你需要的精确度。