定時(shí)運(yùn)行這個(gè)問題其實(shí)老早就接觸到了,不過在上次的程序中似乎沒有很好的解決這個(gè)問題,并且沒有深入下去。這次再次碰到同樣的問題,在查找了網(wǎng)上的資料以后,對(duì)這一問題有了比較深的理解。在程序中實(shí)現(xiàn)定時(shí)運(yùn)行的思路:
由timer控件實(shí)現(xiàn)
兩個(gè)timer控件,其中timer1負(fù)責(zé)每一分鐘檢查一次系統(tǒng)時(shí)間和設(shè)定時(shí)間的差值,如果兩者相差5分鐘,則繼續(xù)檢查,直到當(dāng)相差時(shí)間小于5分鐘,觸發(fā)timer2,timer2的定時(shí)器時(shí)間就是這個(gè)時(shí)間間隔。當(dāng)timer2到時(shí)以后,就觸發(fā)主程序。具體代碼
PRocedure TForm1.Button1Click(Sender: TObject);
begin
  timer1.Interval:=60*1000;        //啟動(dòng)監(jiān)控,每1分鐘檢查一次設(shè)定時(shí)間和當(dāng)前時(shí)間
  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是取當(dāng)前的日期加時(shí)間,time只取當(dāng)前時(shí)間
  if (h_time>l_time) then   begin
  ss:=SecondsBetween(h_time,l_time); //求兩個(gè)時(shí)間相差多少秒
  if ss<5*60 then begin         //如果時(shí)間間隔小于5分鐘定時(shí)啟動(dòng)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;   //再次開始監(jiān)控
end;
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注