![]() |
AW: TThread gibt beim Beenden Speicherleck
Dafür gibt es schon eine extra Methode
Delphi-Quellcode:
nämlich
Thread.Terminate; // Dem Thread 'signalisieren' dass er sich beenden soll (Sprich alles in Execute beenden und raus)
Thread.WaitFor; // Warten, bis Execute abgeschlossen Thread.Free; // Thread freigeben..
Delphi-Quellcode:
- ja, so einfach
Thread.Free;
|
AW: TThread gibt beim Beenden Speicherleck
Zitat:
@HolgerX: Du hast recht, es war auch nicht die
Delphi-Quellcode:
Methode, sondern
.Terminated()
Delphi-Quellcode:
oder sowas in der Art. Kann leider grade nicht nachschauen. Hintergrund des Überschreibens war, dass meine Threads oft auf Events reagieren und die entsprechende Wait Methode blockiert ja. Im
.TerminatedSet()
Delphi-Quellcode:
habe ich dann noch das Event signaled. Da vorher dann auch Terminated gesetzt wurde, kann ich meine Schleife dann direkt beenden und muss nicht erst warten, bis das Event "zufällig" wieder auslöst.
.TerminatedSet()
|
AW: TThread gibt beim Beenden Speicherleck
Zitat:
Seit ich diesen Hinweis gelesen habe bin ich kein Freund von TThread.Free mehr: Zitat:
|
AW: TThread gibt beim Beenden Speicherleck
Zitat:
Das klassische Konstrukt dafür verwendet einen TSimpleEvent. Den erzeugst Du im Constructor der Thread-Klasse bevor Du den inherited constructor aufrufst (nur wichtig in alten Delphi-Versionen). In der Execute-Methode wartest Du dann auf den Event, in deinem Fall mit einem Timeout, der deiner Sleep-Zeit entspricht. Dann überschreibst Du Terminate als inherited; WaitEvent.setEvent; Der Rückgabewert von TSimpleEvent.Waitfor sagt Dir, ob die Methode zurückgekehrt ist weil der Event ausgelöst wurde oder der Timeout abgelaufen ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz