Du solltest dich entscheiden, wer hier die Kontrolle hat.
- entweder du, dann FreeOnTerminate immer auf false und manuelles Free
- oder der Thread, dann FreeOnTerminate true und niemals Free
Himitsu,
einfach danke. Mir fällt es wie Schuppen von den Haaren ...
Die meisten Beuspiele sind immer mit FreeOnTerminate := true; und so bin ich da ebenfalls reingestolpert.
Aber die DH sagt auch
Zitat:
If you want to communicate with the thread or otherwise interact with it, including telling it when to terminate, FreeOnTerminate should never be used. Calling Free on a TThread will set Terminated := True and then block until the thread terminates.
Und so löst sich alles einfach auf mit:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
myThread := TmyThread.Create(true);
//... evtl. weitere Initialisierung, daher createsuspended
myThread.Start;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
myThread.Free;
end;
Das klappt egal ob der Thread gestartet ist oder nicht.
Er wollte so richtig in Delphi einsteigen. Nun steckt er ganz tief drin ...