制作每天定時執行的功能

  • 2474
  • 0

如果是啟動某程式,可以透過系統功能辦到,但如果要能夠讓使用者設定,一天多個時間啟動,或者是WinCE,就需要自己制作

整點檢查基本上是不可能的,因為在polling的時候,沒可能連毫秒都相等,又或者說程式在處理很多事情時,連秒都對不上

所以一定要用範圍檢查,而且要避免重覆啟動,及節省polling的資源,所以我就用以下方法

 如果是啟動某程式,可以透過系統功能辦到,但如果要能夠讓使用者設定,一天多個時間啟動,或者是WinCE,就需要自己制作

整點檢查基本上是不可能的,因為在polling的時候,沒可能連毫秒都相等,又或者說程式在處理很多事情時,連秒都對不上

所以一定要用範圍檢查,而且要避免重覆啟動,及節省polling的資源,所以我就用以下方法

 

定一個時間範圍{Tolerance To}的變數,檢查範圍是發動時間{Trigger Ti},那檢查範圍就是Ti-To ~ Ti+To,檢查週期也是To

結果就是把時間切會以2To為單位,來檢查是否需要啟動,如果縮短To,就可以增加精度,拉長To就可以節省資源,再配合一天會發動多少次就可以得出該用的To

 

程式大概會長這樣

 

//假設有一個TriggerTime的類別可以記錄一個時間點,例如12:30

TriggerTime triggerTime;
long toleranceTime;
//init TriggerTime objects
DateTime l_triggerTime = DateTime.Now.Date + triggerTime;
DateTime l_lowerBound = DateTime.Now - toleranceTime;
DateTime l_upperBound = DateTime.Now + toleranceTime;
bool isTerminate = false;
while(!isTerminate)
{
    if(l_triggerTime > l_lowerBound && l_triggerTime < l_upperBoud)
    {   //...trigger your DoWork   }
    Thread.Sleep(toleranceTime);
}

至於RTOS的WinCE有沒有System Time Event的功能,我還在研究,目前是用這樣的方法

My WP Blog with english technical docs.