定時運行這個問題其實老早就接觸到了,不過在上次的程序中似乎沒有很好的解決這個問題,並且沒有深入下去。這次再次碰到同樣的問題,在查找了網上的資料以後,對這一問題有了比較深的理解。在程序中實現定時運行的思路:
由timer控件實現
兩個timer控件,其中timer1負責每一分鐘檢查一次系統時間和設定時間的差值,如果兩者相差5分鐘,則繼續檢查,直到當相差時間小於5分鐘,觸發timer2,timer2的定時器時間就是這個時間間隔。當timer2到時以後,就觸發主程序。具體代碼
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Interval:=60*1000; //啟動監控,每1分鐘檢查一次設定時間和當前時間
timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
l_time: TDateTime;
h_time: TDateTime;
ss:Int64;
begin
timer1.enabled:=false;
h_time:= strtotime('10:30:00');
l_Time := time; //now是取當前的日期加時間,time只取當前時間
if (h_time>l_time) then begin
ss:=SecondsBetween(h_time,l_time); //求兩個時間相差多少秒
if ss<5*60 then begin //如果時間間隔小於5分鐘定時啟動timer2
timer1.Enabled:=false;
showmessage('Inteval seconds:'+inttostr(ss));
timer2.Interval:=ss*1000;
timer2.Enabled:=true;
end;
end
else
timer1.enabled:=true;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
timer2.enable:=false;
showmessage('ok on time run the program');
// start...
timer1.Enabled:=true; //再次開始監控
end;