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

等待thread 結束的作法

答題得分者是:暗黑破壞神
merlion
一般會員


發表:2
回覆:3
積分:1
註冊:2007-04-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-30 22:05:36 IP:220.135.xxx.xxx 訂閱
小弟目前遇到的問題是有3個動作要接續執行,但是第一個要間隔200秒,在做第二個,第二個間隔160秒再做第三個,第三個要等180秒再繼續做第一個,連續三個cycle,用for(i=0;i<3;i ),再利用timer去做計算,似乎太過天真,只做一次,for迴圈就結束,用Sleep()整個程式似乎當掉一樣,想請教各位前輩,像這樣的情況是否有其它的好辦法?如果用thred去做時間運算,要如何實現?
gac
初階會員


發表:2
回覆:28
積分:26
註冊:2004-08-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-30 22:16:27 IP:218.160.xxx.xxx 未訂閱
<textarea class="cpp" rows="10" cols="60" name="code"> void __fastcall TForm1::Timer1Timer(TObject *Sender) { const int FUNC_INTERVAL[] = {200, 160, 180}; static int s_iIndex; switch(s_iIndex) { case 0: Func1(); break; case 1: Func2(); break; case 2: Func3(); break; default: break(); } Timer1->Interval = FUNC_INTERVAL[s_iIndex] * 1000; if( s_iIndex >= 3) s_iIndex = 0; } </textarea> 用一個 Timer 的方法,應該沒有很天真吧? 預設 Interval 為 0, 這是大概的作法, 如果要讓定時執行的時間更準確的話, 還要把 Func1~3() 執行的時間計算進去。
------
我..........還很嫩!
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-30 22:32:13 IP:218.170.xxx.xxx 未訂閱
用 Sleep 也可以讓程式不像當掉呀。
上一個答覆者的做法可以參考。
不過。不是用 Timer 而是用 Sleep.
也就是把你的 Sleep 切成很小的時間。比如 100ms 的 sleep
然後記得處理一下 Application 的動作。
然後判斷一下你睡多久了。
再做該做的事。
如果沒要做事就再睡。。。。。。
用這樣的方式。就不會像當掉了。
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-03 03:33:53 IP:61.64.xxx.xxx 訂閱
不過計時中的  Application.xxxxx 的動作,要小心

因為沒反應,就是不希望你在多事,在等待期間去按其他按鈕,或功能

不要提供給使用者會干擾或改變目前作業所需狀態的功能
不然會~死當
merlion
一般會員


發表:2
回覆:3
積分:1
註冊:2007-04-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-04 13:05:12 IP:220.128.xxx.xxx 訂閱
問題已經解決了,感謝各位前輩的指點,但是因為是使用暗黑前輩的方法,所以把結案給暗黑前輩,但是還是謝謝另外兩位前輩,讓小弟學到新東西!感謝
系統時間:2024-04-20 15:42:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!