多執行緒 |
|
apple
一般會員 發表:3 回覆:1 積分:0 註冊:2002-04-12 發送簡訊給我 |
|
mihopaul
一般會員 發表:25 回覆:59 積分:16 註冊:2002-03-17 發送簡訊給我 |
|
lee
站長 發表:55 回覆:173 積分:45 註冊:2002-02-27 發送簡訊給我 |
引言: 我以MDI的方式來寫作多執行緒的程式, 每一個Child是一個執行緒, 現在有個問題,在執行緒尚在執行期間, 如何關閉MainForm使整支程式結束?1.在撰寫多執行緒的程式時,您的thread execute()方法要負責檢查terminated屬性的狀態,才能迫使thread提早結束,只要在execute()中加入: procedure TMyThread.Execute; begin for i:=1 to 10000 do begin // ... process if terminated then break; // 被強迫終止,跳出迴圈 end; end;但您可能要注意到,終止之後的變數清除或釋放問題. 2.另外在緊急狀況下,您也可以用Windows Api function的TerminateThread()函式來強迫終止thread,例如:Thread內有無窮迴圈,當掉了..,您可以使用如下指令: terminatedThread(MtThread.Handle,0); 但使用此函數要注意,在Win95/98下會自動free此thread所用的推疊(Stack), 但在NT下Stack會一直留到處理結束,若有使用DLL時,在關閉DLL時會產生問題! ~~~Delphi K.Top網站總管~~~
------
~~~Delphi K.Top網站總管~~~ |
apple
一般會員 發表:3 回覆:1 積分:0 註冊:2002-04-12 發送簡訊給我 |
引言: [quote] if terminated then break; // 被強迫終止,跳出迴圈 但您可能要注意到,終止之後的變數清除或釋放問題.1.terminated的判斷我已經有做了,另外,若未做變數清除或釋放的動作,會有什麼樣的問題? 2.我在help內找不到TerminateThread()的function。 3.我想我上一個問題問得不夠清楚。我該如何在main form close時,一起關掉所有正在執行的sub form,在main form該作哪些處理? 4.我的程式若開啟一個執行緒執行,關閉的時候是ok的,但是若開啟二個以上的執行緒執行,關閉時則下出現下面error "0x00411302"指令參考的"0x6536349"記憶體。該記憶體不能為"read"。 請按「確定」終止程式 請按「取消」進行程式偵錯 再一次地感謝您^___^ |
lee
站長 發表:55 回覆:173 積分:45 註冊:2002-02-27 發送簡訊給我 |
1.terminated的判斷我已經有做了,另外,若未做變數清除或釋放的動作,會有什麼樣的問題?
A:應是記憶體會被佔住,愈用愈少 2.我在help內找不到TerminateThread()的function。
A:在windows.pas中,help也有啊
function TerminateThread; external kernel32 name 'TerminateThread'; The TerminateThread function terminates a thread. BOOL TerminateThread( HANDLE hThread, // handle to the thread DWORD dwExitCode // exit code for the thread );3.我想我上一個問題問得不夠清楚。我該如何在main form close時,一起關掉所有正在執行的sub form,在main form該作哪些處理? A:Main Form關閉時,Child From也會自動關閉的,您是因為加了Thread所以Child Form才不會自動關閉,所以要先停止Thread才能關Child Form 4.我的程式若開啟一個執行緒執行,關閉的時候是ok的,但是若開啟二個以上的執行緒執行,關閉時則下出現下面error "0x00411302"指令參考的"0x6536349"記憶體。該記憶體不能為"read"。 請按「確定」終止程式 請按「取消」進行程式偵錯 A:我猜這不是Thread的問題,這很可能是您的兩個Child Form共用同一的TForm的物件,您可以採用Array of TForm的方式產生Child Form,最好是將TFrom封包至您的Thread物件中,讓Form成為Thread的一部份 ~~~Delphi K.Top網站總管~~~
------
~~~Delphi K.Top網站總管~~~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |