如何知道 Thread 已經完完整整的暫停住 |
尚未結案
|
ray24
中階會員 ![]() ![]() ![]() 發表:18 回覆:88 積分:56 註冊:2002-07-24 發送簡訊給我 |
|
RaynorPao
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: While(1) { RUN(); } 當Thread Excute 中含上述程式 因為處理RUN函式需要一點時間 每當暫停(Suspend)住Thread時 卻不會馬上停止.會直到RUN函式執行完畢才停止 要如何知道Thread 已經完完全全的暫停住了呢? 還請前輩指導....
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
以下是 Thread VCL 的原始碼片斷
procedure TThread.SetSuspended(Value: Boolean); begin if Value <> FSuspended then if Value then Suspend else Resume; end; procedure TThread.Suspend; begin FSuspended := True; SuspendThread(FHandle); end;由以上原始碼看來,您無法經由 Suspend() 或 Suspended=true 將 Thread 立刻停下,同樣您也無法經由 Suspended 這個值來判斷是否真的完完全全暫停了,因為您可以看到 Suspend() 是先將旗標設 true 才叫用 API 暫停 Thread 的,而 Thread 如何暫停是由系統安排,您無法得知。 如果在你的 RUN() 中有 LOOP ,可以先判斷 Suspended 是否為 true(因為 Suspend() 會先將 Suspended 設為 true,可方便您判斷),若是則 Application->ProcessMessages() 一下,讓系統有空將你的 Thread 停下。 如果想要確定真的完完全全暫停,那可能要在 RUN() 的 LOOP 內加入 Counter ,每次 LOOP 加 1,這個 Counter 可由外部存取,當 Suspended 後,一段時間內如果該 Counter 的值不變,就表示已 Suspended 了。 當然您的 LOOP 必需保證不會卡死,否則,此法無效。 沒空更新的網頁... http://coolsite.to/dllee C及指標教學,計算機概論,資訊管理導論... http://home.kimo.com.tw/dllee.tw http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
ray24
中階會員 ![]() ![]() ![]() 發表:18 回覆:88 積分:56 註冊:2002-07-24 發送簡訊給我 |
|
wj77
一般會員 ![]() ![]() 發表:0 回覆:9 積分:6 註冊:2003-02-17 發送簡訊給我 |
|
jazz
初階會員 ![]() ![]() 發表:10 回覆:43 積分:35 註冊:2002-06-15 發送簡訊給我 |
|
ray24
中階會員 ![]() ![]() ![]() 發表:18 回覆:88 積分:56 註冊:2002-07-24 發送簡訊給我 |
|
wj77
一般會員 ![]() ![]() 發表:0 回覆:9 積分:6 註冊:2003-02-17 發送簡訊給我 |
引言: 啊.... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |