您的位置 首页 ADAS

Timer定时器的规划办法

在系统开发过程中经常用到定时器进行定时处理,比如比较常见的邮件群发、实时更新论坛的在线人数、文章数、点击率等。 很多情况下,我们不能对某一

  在体系开发过程中常常用到守时器进行守时处理,比方比较常见的邮件群发、实时更新论坛的在线人数、文章数、点击率等。 许多情况下,咱们不能对某一状况或许某一行为进行实时监控,所以就期望体系能够完成这一功用。经过多线程技能能够使得守时器的功能更高。

  虽然守时器能够主动处理或许一些批处理操作,可是守时器也给体系带来必定的安全隐患,特别是当守时进行的操作呈现bug时,假如没有对Exception做出及时的处理,体系资源将会大大的糟蹋,严峻的情况下,或许导致体系溃散。因而,关于守时器的运用必定要稳重,至少要确保守时处理的行为呈现异常的或许性很小,并在呈现Exception的情况下及时处理。

  System.Threading.Timer 是一个十分常用的守时器类,是一个运用回调办法的计时器,并且由线程池线程服务,简略且对资源要求不高。

  public Timer (

  TimerCallback callback,

  Object state,

  TimeSpan dueTime,

  TimeSpan period

  )

  参数

  callback

  一个 TimerCallback 托付,表明要履行的办法。

  state

  一个包含回调办法要运用的信息的目标,或许为 空引证(在 Visual Basic 中为 Nothing)。

  dueTime

  TimeSpan,表明在 callback 参数调用它的办法之前推迟的时刻量。指定 -1 毫秒以避免发动计时器。指定零 (0) 以当即发动计时器。

  period

  在调用 callback 所引证的办法之间的时刻距离。指定 -1 毫秒能够禁用定时停止。

  办法、原理

  运用 TimerCallback 托付指定时望 Timer 履行的办法。计时器托付在结构计时器时指定,并且不能更改。此办法不在创立计时器的线程上履行,而是在体系供给的 ThreadPool 线程上履行。

  创立计时器时,能够指定在第一次履行办法之前等候的时刻量(截止时刻)以及尔后的履行期间等候的时刻量(时刻周期)。能够运用 Change 办法更改这些值或禁用计时器。

  当不再需求计时器时,请运用 Dispose 办法开释计时器持有的资源。假如期望在计时器被开释时接收到信号,请运用承受 WaitHandle 的 Dispose(WaitHandle) 办法重载。计时器已被开释后,WaitHandle 便停止。

  由计时器履行的回调办法应该是可重入的,由于它是在 ThreadPool 线程上调用的。

  补白:

  在超越 dueTime 今后及尔后每隔 period 时刻距离,都会调用一次 callback 参数所指定的托付。

  假如 dueTime 为零 (0),则当即调用 callback。假如 dueTime 是 -1 毫秒,则不会调用 callback;计时器将被禁用,但经过调用 Change 办法能够从头启用计时器。

  假如 period 为零 (0) 或 -1 毫秒,并且 dueTime 为正,则只会调用一次 callback;计时器的定时行为将被禁用,但经过运用 Change 办法能够从头启用该行为。

  最简略的守时器

  using System;

  using System.Threading;

  public class TestTimer

  {

  /**////

  /// 守时器

  ///

  private Timer iTimer;

  /**////

  /// constructor

  ///

  public TestTimer()

  {

  iTimer = new System.Threading.Timer(new TimerCallback(Doing));

  iTimer.Change(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));

  }

  /**////

  ///

  ///

  ///

  public void Doing(object nObject)

  {

  //do something

  }

  }

  一个比较完好的计时器:

  下面是我规划的一个简略实例。在一个问卷调查体系中,每一张问卷都有其停止日期,当抵达了停止日期时,需求体系主动将其封闭。这就需求守时器对问卷的状况和停止日期进行实时监控,及时封闭。这儿采用了一个简略的单件形式来操作、操控守时器。 这儿首要的操作包含守时器开端、停止、履行一次。

  PaperManager管理类

  /**////

  /// 管理类

  ///

  public class PaperManager

  {

  /**////

  /// 守时器

  ///

  private Timer iTimer;

  /**////

  /// 发动时刻

  ///

  private TimeSpan dueTime;

  /**////

  /// 办法调用距离

  ///

  private TimeSpan period;

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/135787.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部