アプリケーションを終了させようとすると、何かのスレッドが生きたままなんかで、終了できない事がある。モチロン、その原因を探り、正しく終了させるのがよいのだけど、どっかで入手したネットワークコンポーネントなんかが返ってこないパターンもあったりする 一定時間待って、終了できなかったら別スレッドから自分自身を強制終了するスレッドオブジェクト 終了時 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.