Einzelnen Beitrag anzeigen

UliBru

Registriert seit: 10. Mai 2010
155 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Freigeben eines suspended Threads

  Alt 27. Apr 2012, 11:38
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 ...
  Mit Zitat antworten Zitat