TThread freigeben

Ich benutze in meinem Programm einen Thread. Nun soll dieser
beim Beenden freigegeben werden. Wenn ich beim OnClose-Ereignis
thread.free; eingebe dann bringt er manchmal einen Fehler.
Wie kann ich am Besten feststellen, ob ich den Thread noch
beenden muss bevor ich in freigeben kann?

Danke
Mario

Hallo Mario,
etwas Quelltext wäre interessant;
hier ein Beispielcode der in meinen Anwendungen funktioniert;
type
TDatumZeit = class(Thread)

end;
tform(…)
DatumZeit: TDatumZeit; // Instanze des Threads

end;

procedure TForm.onClose(…)

DatumZeit.Free;

Vielleicht hilft Dir das.
Mathias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Und wenn der Thread noch läuft oder Suspended ist?

Danke
Mario

Hi Mario,
Ist eigentlich Egal, da Delphi das automatisch
machen sollte.

Ist die Eigenschaft des Threads FreeOnTerminate
auf True gesetzt wird der Thread automatisch freigegeben,
wenn Execute des Threads beendet wird. Ist dieses nicht der
Fall - muss im Hauptkontext (da wo der Thread erzeugt wurde)
dieser auch mit Free freigegeben werden.

Mit Free() erhält der Thread die Info, seine Ausführung zu
beenden. Solange wartet Thread.Destroy() (wird von Free aufgerufen).

Interessant wirds erst, wenn in der Ausführung eine
Endlosschleife eingebaut ist, die NICHT die Eigenschaft
Terminated abfragt.
in der Execute-Methode könnte stehen:

while not terminated do begin
… tue irgentwas
end;

falsch wäre
while true do begin
… tue irgentwas
end;

Ist natürlich abhängig davon, was der Thread machen soll.

Ich würde wie folgt vorgehen:
Bei Erstellung des Thread FreeOnTerminate auf False;
vor Freigabe des Threads abfragen, welchen Status er hat und
ihn dann wie gewünscht freigeben.

ich Hoffe, Du kannst damit was anfangen.
Mathias

Und wenn der Thread noch läuft oder Suspended ist?

Danke
Mario