Delphi で無名スレッド実行中に親オブジェクトを破棄するとスレッドはどうなるのか

 Delphi で無名スレッド実行中に親オブジェクトを破棄するとスレッドはどうなるのか → 親オブジェクト破棄後も実行し続ける

以下、MyClass 内の無名スレッドから Caption へカウントダウンを表示するプログラムの抜粋、スレッド開始1秒後に MyClassを破棄しているが、カウントダウンはそのまま続行されます
ちなみに TThread.CurrentThread に Terminated プロパティは存在しません
  1. type  
  2.   
  3. TMyClass = class(TObject)  
  4. private  
  5.   
  6. public  
  7.     FForm: TForm;  
  8.     constructor Create;  
  9.     destructor Destroy; override;  
  10.     procedure StrtThread;  
  11. end;  
  12.   
  13. implementation  
  14.   
  15. procedure TMyClass.StrtThread;  
  16. begin  
  17.     TThread.CreateAnonymousThread(  
  18.         procedure  
  19.         var  
  20.             I: Integer;  
  21.             FFForm: TForm;  
  22.         begin  
  23.             FFForm := FForm;  
  24.             for I := 10 downto 0 do begin  
  25.                 TThread.Synchronize(TThread.CurrentThread,  
  26.                     procedure()  
  27.                     begin  
  28.                         FFForm.Caption := IntToStr(I);  
  29.                     end);  
  30.                 Sleep(1000);  
  31.             end;  
  32.         end).Start;  
  33. end;  
  34.   
  35. // MyClass生成と廃棄  
  36. procedure TForm1.Button1Click(Sender: TObject);  
  37. var  
  38.     MyClass: TMyClass;  
  39. begin  
  40.     MyClass := TMyClass.Create;  
  41.     try  
  42.         MyClass.FForm := Self;  
  43.         MyClass.StrtThread;  
  44.         Sleep(1000);  
  45.     finally  
  46.         MyClass.Free;  
  47.     end;  
  48. end;  
スレッドの独立性を保つため、FFForm := FForm を行っているが、MyClass.FFormを参照しつづけてもカウントダウンは続行された、これは MyClass 廃棄後もメモリ上に参照先が残っているだけの可能性もあるため、実行クラスのメンバ参照が保証されるかは疑問です

コメント