【问题标题】:what is the best approach for implementing a thread timer实现线程计时器的最佳方法是什么
【发布时间】:2010-03-16 13:04:37
【问题描述】:

使用计时器的最佳方法是什么。使用 System.Timer.Timer 类还是在带有 Thread.Sleep 语句的非终止循环中使用单个线程?

提前致谢

【问题讨论】:

  • 取决于你想要达到的目标......如果你想要一些有计时目的的东西而不是你应该使用......等待它......计时器:D

标签: c# multithreading timer


【解决方案1】:

一般来说,如果满足您的需要,请使用已有的组件。但是,System.Threading.Timer 使用 .NET 线程池,因此以下任何一种情况都会使其成为较差的候选对象:

  • 您需要一个 STA 线程(所有 ThreadPool 线程都是 MTA)
  • 您要求所有重复任务都在同一个线程上运行
  • 您想为您的任务分配特定的优先级(更低或更高)
  • 您的任务运行时间特别长或使用了重要的块

【讨论】:

    【解决方案2】:

    使用计时器。它就在那里,专门用于这个目的,那么你为什么不使用它呢?

    【讨论】:

      【解决方案3】:

      您提到的两种方法用于不同的结果。

      计时器将触发事件并按预定时间间隔调用您的方法。他们可以在另一个实例运行时调用您的方法,除非您在处理开始时停止计时器 (DoWork) 并在完成后重新启动它(但是您可能会错过计时事件)。

      一个循环和休眠的方法在忙时不会被调用。这里的“好处”是可以做DoWork,然后发现下一个定时器事件已经过去了,立即再次做DoWork。另一种方法是,无论您的 DoWork 方法花费了多长时间,您都可以在休息时间段内睡指定的时间。

      【讨论】:

        猜你喜欢
        • 2015-07-24
        • 2015-08-21
        • 1970-01-01
        • 1970-01-01
        • 2016-12-24
        • 1970-01-01
        • 2016-12-21
        • 1970-01-01
        相关资源
        最近更新 更多