Delphi/C++ Builder アプリケーションで自分自身を強制終了

アプリケーションを終了させようとすると、何かのスレッドが生きたままなんかで、終了できない事がある。モチロン、その原因を探り、正しく終了させるのがよいのだけど、どっかで入手したネットワークコンポーネントなんかが返ってこないパターンもあったりする

一定時間待って、終了できなかったら別スレッドから自分自身を強制終了するスレッドオブジェクト

終了時
  1. TTerminateThread.Create(False);  
みたいに記述しておけば、下記の場合4秒後に強制終了する

  1. unit TerminateUtil;  
  2. interface  
  3.   
  4. uses  
  5.     Classes, Windows;  
  6.   
  7. type  
  8.     TTerminateThread = class(TThread)  
  9.     protected  
  10.         procedure Execute; override;  
  11.     end;  
  12.   
  13. implementation  
  14.   
  15. { TTerminateThread }  
  16.   
  17. procedure TTerminateThread.Execute;  
  18. var hProcess: THandle;  
  19. begin  
  20.     FreeOnTerminate := True;  
  21.     Sleep(4000);  
  22.   
  23.     hProcess := OpenProcess(PROCESS_TERMINATE, False, GetCurrentProcessId());  
  24.     if (hProcess <> 0then begin  
  25.         try  
  26.             TerminateProcess(hProcess, 0);  
  27.         finally  
  28.             CloseHandle(hProcess);  
  29.         end;  
  30.     end;  
  31. end;  
  32.   
  33. end.  

コメント