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

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

以下、MyClass 内の無名スレッドから Caption へカウントダウンを表示するプログラムの抜粋、スレッド開始1秒後に MyClassを破棄しているが、カウントダウンはそのまま続行されます
ちなみに TThread.CurrentThread に Terminated プロパティは存在しません
type

TMyClass = class(TObject)
private

public
    FForm: TForm;
    constructor Create;
    destructor Destroy; override;
    procedure StrtThread;
end;

implementation

procedure TMyClass.StrtThread;
begin
    TThread.CreateAnonymousThread(
        procedure
        var
            I: Integer;
            FFForm: TForm;
        begin
            FFForm := FForm;
            for I := 10 downto 0 do begin
                TThread.Synchronize(TThread.CurrentThread,
                    procedure()
                    begin
                        FFForm.Caption := IntToStr(I);
                    end);
                Sleep(1000);
            end;
        end).Start;
end;

// MyClass生成と廃棄
procedure TForm1.Button1Click(Sender: TObject);
var
    MyClass: TMyClass;
begin
    MyClass := TMyClass.Create;
    try
        MyClass.FForm := Self;
        MyClass.StrtThread;
        Sleep(1000);
    finally
        MyClass.Free;
    end;
end;
スレッドの独立性を保つため、FFForm := FForm を行っているが、MyClass.FFormを参照しつづけてもカウントダウンは続行された、これは MyClass 廃棄後もメモリ上に参照先が残っているだけの可能性もあるため、実行クラスのメンバ参照が保証されるかは疑問です

コメント