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