Delphi/C++ Builder アプリケーションで自分自身を強制終了
アプリケーションを終了させようとすると、何かのスレッドが生きたままなんかで、終了できない事がある。モチロン、その原因を探り、正しく終了させるのがよいのだけど、どっかで入手したネットワークコンポーネントなんかが返ってこないパターンもあったりする
一定時間待って、終了できなかったら別スレッドから自分自身を強制終了するスレッドオブジェクト
終了時
一定時間待って、終了できなかったら別スレッドから自分自身を強制終了するスレッドオブジェクト
終了時
TTerminateThread.Create(False);みたいに記述しておけば、下記の場合4秒後に強制終了する
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.
コメント