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

多執行緒

 
apple
一般會員


發表:3
回覆:1
積分:0
註冊:2002-04-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-04-12 01:01:28 IP:61.70.xxx.xxx 未訂閱
我以MDI的方式來寫作多執行緒的程式, 每一個Child是一個執行緒, 現在有個問題,在執行緒尚在執行期間, 如何關閉MainForm使整支程式結束?
mihopaul
一般會員


發表:25
回覆:59
積分:16
註冊:2002-03-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-04-12 03:50:04 IP:211.74.xxx.xxx 未訂閱
不知道application.Terminate 能不能結束他們哩 不然的話就送close訊息給他們叫他們close 就我所知是這樣子的^^|||
lee
站長


發表:55
回覆:173
積分:45
註冊:2002-02-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-04-12 07:51:40 IP:61.219.xxx.xxx 未訂閱
引言: 我以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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-04-12 10:17:36 IP:61.70.xxx.xxx 未訂閱
引言: [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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-04-18 13:01:55 IP:61.219.xxx.xxx 未訂閱
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網站總管~~~
系統時間:2024-11-25 23:50:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!