<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > Timer定時(shí)器的設(shè)計(jì)方法

          Timer定時(shí)器的設(shè)計(jì)方法

          作者: 時(shí)間:2018-09-04 來(lái)源:網(wǎng)絡(luò) 收藏

            在系統(tǒng)開發(fā)過(guò)程中經(jīng)常用到定時(shí)器進(jìn)行定時(shí)處理,比如比較常見的郵件群發(fā)、實(shí)時(shí)更新論壇的在線人數(shù)、文章數(shù)、點(diǎn)擊率等。 很多情況下,我們不能對(duì)某一狀態(tài)或者某一行為進(jìn)行實(shí)時(shí)監(jiān)控,所以就希望系統(tǒng)能夠?qū)崿F(xiàn)這一功能。通過(guò)多線程技術(shù)可以使得定時(shí)器的性能更高。

          本文引用地址:http://www.ex-cimer.com/article/201809/388353.htm

            盡管定時(shí)器能夠自動(dòng)處理或者一些批處理操作,但是定時(shí)器也給系統(tǒng)帶來(lái)一定的安全隱患,特別是當(dāng)定時(shí)進(jìn)行的操作出現(xiàn)bug時(shí),如果沒有對(duì)Exception做出及時(shí)的處理,系統(tǒng)資源將會(huì)大大的浪費(fèi),嚴(yán)重的情況下,可能導(dǎo)致系統(tǒng)崩潰。因此,對(duì)于定時(shí)器的使用一定要慎重,至少要保證定時(shí)處理的行為出現(xiàn)異常的可能性很小,并在出現(xiàn)Exception的情況下及時(shí)處理。

            System.Threading.Timer 是一個(gè)非常常用的定時(shí)器類,是一個(gè)使用回調(diào)方法的計(jì)時(shí)器,而且由線程池線程服務(wù),簡(jiǎn)單且對(duì)資源要求不高。

            public Timer (

            TimerCallback callback,

            Object state,

            TimeSpan dueTime,

            TimeSpan period

            )

            參數(shù)

            callback

            一個(gè) TimerCallback 委托,表示要執(zhí)行的方法。

            state

            一個(gè)包含回調(diào)方法要使用的信息的對(duì)象,或者為 空引用(在 Visual Basic 中為 Nothing)。

            dueTime

            TimeSpan,表示在 callback 參數(shù)調(diào)用它的方法之前延遲的時(shí)間量。指定 -1 毫秒以防止啟動(dòng)計(jì)時(shí)器。指定零 (0) 以立即啟動(dòng)計(jì)時(shí)器。

            period

            在調(diào)用 callback 所引用的方法之間的時(shí)間間隔。指定 -1 毫秒可以禁用定期終止。

            方法、原理

            使用 TimerCallback 委托指定希望 Timer 執(zhí)行的方法。計(jì)時(shí)器委托在構(gòu)造計(jì)時(shí)器時(shí)指定,并且不能更改。此方法不在創(chuàng)建計(jì)時(shí)器的線程上執(zhí)行,而是在系統(tǒng)提供的 ThreadPool 線程上執(zhí)行。

            創(chuàng)建計(jì)時(shí)器時(shí),可以指定在第一次執(zhí)行方法之前等待的時(shí)間量(截止時(shí)間)以及此后的執(zhí)行期間等待的時(shí)間量(時(shí)間周期)。可以使用 Change 方法更改這些值或禁用計(jì)時(shí)器。

            當(dāng)不再需要計(jì)時(shí)器時(shí),請(qǐng)使用 Dispose 方法釋放計(jì)時(shí)器持有的資源。如果希望在計(jì)時(shí)器被釋放時(shí)接收到信號(hào),請(qǐng)使用接受 WaitHandle 的 Dispose(WaitHandle) 方法重載。計(jì)時(shí)器已被釋放后,WaitHandle 便終止。

            由計(jì)時(shí)器執(zhí)行的回調(diào)方法應(yīng)該是可重入的,因?yàn)樗窃?ThreadPool 線程上調(diào)用的。

            備注:

            在超過(guò) dueTime 以后及此后每隔 period 時(shí)間間隔,都會(huì)調(diào)用一次 callback 參數(shù)所指定的委托。

            如果 dueTime 為零 (0),則立即調(diào)用 callback。如果 dueTime 是 -1 毫秒,則不會(huì)調(diào)用 callback;計(jì)時(shí)器將被禁用,但通過(guò)調(diào)用 Change 方法可以重新啟用計(jì)時(shí)器。

            如果 period 為零 (0) 或 -1 毫秒,而且 dueTime 為正,則只會(huì)調(diào)用一次 callback;計(jì)時(shí)器的定期行為將被禁用,但通過(guò)使用 Change 方法可以重新啟用該行為。

            最簡(jiǎn)單的定時(shí)器

            using System;

            using System.Threading;

            public class TestTimer

            {

            /**////

            /// 定時(shí)器

            ///

            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

            }

            }

            一個(gè)比較完整的計(jì)時(shí)器:

            下面是我設(shè)計(jì)的一個(gè)簡(jiǎn)單實(shí)例。在一個(gè)問(wèn)卷調(diào)查系統(tǒng)中,每一張問(wèn)卷都有其終止日期,當(dāng)?shù)竭_(dá)了終止日期時(shí),需要系統(tǒng)自動(dòng)將其關(guān)閉。這就需要定時(shí)器對(duì)問(wèn)卷的狀態(tài)和終止日期進(jìn)行實(shí)時(shí)監(jiān)控,及時(shí)關(guān)閉。這里采用了一個(gè)簡(jiǎn)單的單件模式來(lái)操作、控制定時(shí)器。 這里主要的操作包括定時(shí)器開始、終止、執(zhí)行一次。

            PaperManager管理類

            /**////

            /// 管理類

            ///

            public class PaperManager

            {

            /**////

            /// 定時(shí)器

            ///

            private Timer iTimer;

            /**////

            /// 啟動(dòng)時(shí)間

            ///

            private TimeSpan dueTime;

            /**////

            /// 方法調(diào)用間隔

            ///

            private TimeSpan period;


          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();