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

請問一下動態產生timer的方法

尚未結案
Schuamcher
一般會員


發表:30
回覆:42
積分:14
註冊:2004-11-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-21 16:27:49 IP:59.121.xxx.xxx 未訂閱
請問一下我有一個程式是要資料進來後分別在1 分鐘、2分鐘、3 分鐘之後作出動作,但是資料量可能在一天進來數千次,這樣的話我是不是要動態產生數千個Timer,因為前資料可能一分鐘進來數十次,如果不動態產生數千個Timer,我有什麼方可以作到呢,謝謝
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-21 19:24:03 IP:219.137.xxx.xxx 未訂閱
Schuamcher 您好:    應該不需要動態產生那麼多的 Timer 吧?我的想法是這樣的:
宣告 vector int 型態的全域變數 tm:
vector tm;    每進來一筆資料就新增一個 tm 變數,為便於後續的處理,因此新元素插在陣列開頭:
tm.insert(tm.begin(), 0);    將 Timer 的 Interval 設大一點,例如 10000 (10 秒鐘),以免資料筆數太多時會來不及處理。    於 Timer 事件中設定如下敘述:
int cnt = tm.size();
// 由後往前開始執行迴圈,以免 erase 元素後會計算錯誤
for(int i=cnt-1; i>=0; i--){
    tm[i]  ;  // 累加計數值
    if(tm[i] == 6){  // 10 秒進入 Timer 1 次,6 次即為 1 分鐘
        doFunc1();
    }else if(tm[i] == 12){  // 10 秒進入 Timer 1 次,12 次即為 2 分鐘
        doFunc2();
    }else if(tm[i] == 18){  // 10 秒進入 Timer 1 次,18 次即為 3 分鐘
        doFunc3();
        tm.erase(&tm[i]);  // 不再需要就刪除掉
    }
}    於程式結束時,刪除整個 tm 變數:
tm.clear();
不知道這樣子行不行?您參考看看吧。
Schuamcher
一般會員


發表:30
回覆:42
積分:14
註冊:2004-11-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-23 20:10:42 IP:211.22.xxx.xxx 未訂閱
謝謝RedSnow兄的幫助,不過我試了一下,發現在程式跑的過程中不會跳到Fuction的程序中,因為在當有進入程序中,他會執行至刪整個tm。所以程式不會執行至function ,不過還是感謝RedSnow的想法
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-23 22:36:55 IP:218.19.xxx.xxx 未訂閱
Schuamcher 您好:    您大概是誤解了,tm.clear() 是寫在程式結束時,不是 Timer 程序結束時,也就是寫在 MainForm 的 OnClose 事件中。
Schuamcher
一般會員


發表:30
回覆:42
積分:14
註冊:2004-11-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-24 09:19:43 IP:211.22.xxx.xxx 未訂閱
因為我程式功力太低,才誤解redsnow兄的意思,謝謝redsnow兄。
Schuamcher
一般會員


發表:30
回覆:42
積分:14
註冊:2004-11-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-24 14:20:37 IP:211.22.xxx.xxx 未訂閱
因為我程式功力太低,才誤解redsnow兄的意思,謝謝redsnow兄。
系統時間:2024-05-17 14:35:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!