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

程式用 Application.Terminate 之後,還存在系統裡面,怎辦?

答題得分者是:boson
pplainer
一般會員


發表:1
回覆:2
積分:0
註冊:2005-05-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-18 09:59:00 IP:60.248.xxx.xxx 未訂閱
程式執行 Application.Terminate 之後,在工作管理員裡面 還是看的到這個程式的 Process 在執行,並沒有結束掉. 我的程式裡面有 Thread. 流程大概如下 MainForm 裡面執行 TUploadThread.Create(false); 在 TUploadThread 裡面,取用 TImageMagick 物件 (透過 DLL) TUpload.Execute 執行完, 在另一個 UploadForm 執行 Application.Terminate 而 DLL Free 是在一個 Global Function 裡面寫的. (TImageMagick.pas 裡面的 finalization) 請問,這樣沒辦法將 這個 程式真正的結束掉嗎? (Application.Terminate)? 謝謝回覆. BR 凡
------

boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-18 10:11:31 IP:218.170.xxx.xxx 未訂閱
試試將 Application.Terminate; 改為 ExitProcess(0);
pplainer
一般會員


發表:1
回覆:2
積分:0
註冊:2005-05-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-18 15:35:03 IP:60.248.xxx.xxx 未訂閱
非常感謝,已經解決了! 請問一下, Application.Terminate 為什麼不會把所有的 resource 都關掉呢? 而 ExitProcess(0); 卻可以呢? BR, 凡
------

boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-18 17:36:00 IP:218.174.xxx.xxx 未訂閱
Application.Terminate 只是呼叫 PostQuitMessage 這個 Windows API 表明程式準備要結束而已, 它並不會立即中止整個程式, 也不會強迫終止 若有其他程序還在運行, 則程式很可能會發生如你描述的那種情形 Application.Terminate 的詳細說明, 請參照 Delphi 的 Help , 雖然說明並不多    而 ExitProcess , 則是直接且乾淨地終止程式 MSDN 對此有詳細的說明, 請參照: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcekernl/html/_wcesdk_win32_exitprocess.asp    看看底下的例子:    
procedure TForm1.Button1Click(Sender: TObject);
begin
   Application.Terminate;
end;    procedure TForm1.Button2Click(Sender: TObject);
var
   b:boolean;
begin
   B:=False;
   repeat
      Application.ProcessMessages;
      Sleep(300);
   until B;
end;
先按下 Button2, 啟動一個無窮迴圈, 當按下 Button1 時, 程式就掛了 但若 Button1 的 OnClick 裏頭執行的是 ExitProcess(0);, 則程式就可以完全結束
系統時間:2024-06-28 18:04:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!