線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3092
推到 Plurk!
推到 Facebook!

delphi中關於定時執行的問題

答題得分者是:Brian77
zhuna
一般會員


發表:26
回覆:39
積分:13
註冊:2003-05-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-07 08:18:19 IP:210.75.xxx.xxx 未訂閱
我現在有n個sql語句要按設定的時間間隔執行,起始時間是已設定好的. 如 sql1, 每隔4小時執行一次 sql2, 每隔3小時執行一次 sql3, 每隔5小時執行一次 sql4, 每隔2小時執行一次 . ........ . ........ . ........ 請問在delphi中如何實現? 互相幫助,共同進步
------
互相幫助,共同進步
Clarinet
高階會員


發表:9
回覆:97
積分:126
註冊:2002-05-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-07 09:17:15 IP:61.66.xxx.xxx 未訂閱
引言: 我現在有n個sql語句要按設定的時間間隔執行,起始時間是已設定好的. 如 sql1, 每隔4小時執行一次 sql2, 每隔3小時執行一次 sql3, 每隔5小時執行一次 sql4, 每隔2小時執行一次 . ........ . ........ . ........ 請問在delphi中如何實現? 互相幫助,共同進步
用Timer元件,就能做到了! GPS(全球衛星定位系統) http://www.allgps.com
------
GPS(全球衛星定位系統)
http://www.allgps.com
zhuna
一般會員


發表:26
回覆:39
積分:13
註冊:2003-05-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-07 14:55:45 IP:210.75.xxx.xxx 未訂閱
引言: [quote] 我現在有n個sql語句要按設定的時間間隔執行,起始時間是已設定好的. 如 sql1, 每隔4小時執行一次 sql2, 每隔3小時執行一次 sql3, 每隔5小時執行一次 sql4, 每隔2小時執行一次 . ........ . ........ . ........ 請問在delphi中如何實現? 互相幫助,共同進步
用Timer元件,就能做到了! 可否舉個例子?sql語句的個數是不定的. 互相幫助,共同進步
------
互相幫助,共同進步
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-07 15:34:55 IP:63.84.xxx.xxx 未訂閱
您好﹒ TTimer元件在System元件頁﹐其作用是可以每隔一段時間去呼叫一個事件﹐間隔時間可以自訂﹒其屬性如下﹕ Enable屬性﹕設定Timer元件是否有效﹐若有效時﹐即可在一定的時間內自動呼叫OnTimer事件 Interval屬性﹕設定OnTimer事件触發的間隔時間﹐其單位為千分之一秒﹐有范圍限定﹐0~65535﹐當Interval屬性為非0時才會去呼叫OnTimer事件﹐預設值為1000﹐即每秒触發一次OnTimer事件﹒ 如您的問題﹐即可利用Timer元件來完成﹐首先將其Enable屬性設定ture, 而后再在其Interval屬性中設定執行事件的時間﹐再將SQL寫入其OnTimer事件中﹐如果有多個SQL的話﹐那就多用幾個Timer元件來對應啦﹒當然這里還涉及到一個Interval屬性無法設定到幾小時那么長的間隔時間﹐所以﹐可以考慮一下在OnTime事件中用迴圈來做﹐直到Interval的值達到迴圈的數值﹐再執行其下的SQL﹒ 參考看看﹗ 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/08/07 15:59:16
------
忻晟
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-08 09:59:41 IP:61.61.xxx.xxx 未訂閱
mSQL:array of String;   // SQL 語句
mStep:array of integer; // 時間間隔 (以分為單位)
mTime:array of integer; // 計時 (以分為單位)    Timer1.Interval:=60000;  // 一分鐘
每一組要設定 mSQL 和 mStep、mTime
mTiem 的初值為 0 或與 mStep 相同    procedure TForm1.Timer1Timer:
var i:integer;
begin
  Timer1.Enabled:=False;
  try
    for i:=0 to Length(mSQL)-1 do
    begin
      dec(mTime[i]);
      if mTime[i]<=0 then
      begin
        mTime[i]:=mStep[i];
        try
          執行 mSQL[i];
        except
          ...
        end;
      end;
    end;
  finally
    Timer1.Enabled:=True;
  end;
end;
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-08 10:09:50 IP:61.61.xxx.xxx 未訂閱
引言: Interval屬性﹕設定OnTimer事件触發的間隔時間﹐其單位為千分之一秒﹐有范圍限定﹐0~65535﹐當Interval屬性為非0時才會去呼叫OnTimer事件﹐預設值為1000﹐即每秒触發一次OnTimer事件﹒ 發表人 - cashxin2002 於 2003/08/07 15:59:16
Interval 型態為 Cardinal 即32位元正整數 online help 中並未提及最大值限制 做了項簡單測試, 設為兩分鐘 (120000) 可正常運作 另, 其值必須不可為 0
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-08 15:03:07 IP:63.84.xxx.xxx 未訂閱
感謝Brian77指正﹒    小弟有這個想法是因為記得曾經有看到過這樣一段﹕ [Intervan屬性其單位為千分之一秒﹐範圍從0到65535] 摘自[Delphi實務經典][林金霖] 剛才又去找這本書﹐再重新測試了一下﹐果然可以輸入更大的數值﹒ 努力,相信會獲得美麗! 忻晟
------
忻晟
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-12 13:29:07 IP:61.57.xxx.xxx 未訂閱
這樣做會有一些問題 可能會造成有些工作會lost掉 因為當程式忙碌,而無法處理訊息時,Timer 是無法被觸發的 縱使在程式中加上了 Application.ProcessMessages 也可能會因為單一行程式執行時間過久 (如一條 SQL 或 Stored procedure 執行時間超過 Timer.Interval 的時間) 而造成 Timer 該觸發而未觸發的狀況 所以我建議工作執行緒要和主程式分開 可以設計一個 class,包含工作內容、時間間隔等屬性,以及一個計時方法。 每一項工作建立一個工作物件,主程式只有一個 Timer ,Interval 設定為 60000,當 OnTimer 事件發生時,逐一呼叫各工作物件的計時方法。 在工作物件的計時方法中去檢查是否到達時間間隔,如果到達,建立一個工作執行緒以執行工作。 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
系統時間:2024-07-04 23:57:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!