新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > Timer定時器的設計方法

        Timer定時器的設計方法

        作者: 時間:2018-09-04 來源:網絡 收藏

          在系統開發過程中經常用到定時器進行定時處理,比如比較常見的郵件群發、實時更新論壇的在線人數、文章數、點擊率等。 很多情況下,我們不能對某一狀態或者某一行為進行實時監控,所以就希望系統能夠實現這一功能。通過多線程技術可以使得定時器的性能更高。

        本文引用地址:http://www.104case.com/article/201809/388353.htm

          盡管定時器能夠自動處理或者一些批處理操作,但是定時器也給系統帶來一定的安全隱患,特別是當定時進行的操作出現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;


        上一頁 1 2 3 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 噶尔县| 舒兰市| 普陀区| 西宁市| 方山县| 海安县| 韶山市| 吴堡县| 崇左市| 通榆县| 宁乡县| 闵行区| 安平县| 水富县| 来安县| 万山特区| 云霄县| 富川| 兴化市| 灵宝市| 体育| 鄂尔多斯市| 信丰县| 晋宁县| 黄骅市| 兰西县| 铁岭市| 武汉市| 永川市| 法库县| 阿巴嘎旗| 化德县| 宁海县| 诸暨市| 台州市| 丹东市| 恭城| 大埔县| 衢州市| 杂多县| 胶州市|