Delphi/C++ Builder アプリケーションで自分自身を強制終了
アプリケーションを終了させようとすると、何かのスレッドが生きたままなんかで、終了できない事がある。モチロン、その原因を探り、正しく終了させるのがよいのだけど、どっかで入手したネットワークコンポーネントなんかが返ってこないパターンもあったりする
一定時間待って、終了できなかったら別スレッドから自分自身を強制終了するスレッドオブジェクト
終了時
みたいに記述しておけば、下記の場合4秒後に強制終了する
一定時間待って、終了できなかったら別スレッドから自分自身を強制終了するスレッドオブジェクト
終了時
- TTerminateThread.Create(False);
- unit TerminateUtil;
- interface
- uses
- Classes, Windows;
- type
- TTerminateThread = class(TThread)
- protected
- procedure Execute; override;
- end;
- implementation
- { TTerminateThread }
- procedure TTerminateThread.Execute;
- var hProcess: THandle;
- begin
- FreeOnTerminate := True;
- Sleep(4000);
- hProcess := OpenProcess(PROCESS_TERMINATE, False, GetCurrentProcessId());
- if (hProcess <> 0) then begin
- try
- TerminateProcess(hProcess, 0);
- finally
- CloseHandle(hProcess);
- end;
- end;
- end;
- end.
コメント