Registriert seit: 3. Sep 2004
4.629 Beiträge
Delphi 10.2 Tokyo Starter
|
AW: TThread gibt beim Beenden Speicherleck
2. Mär 2019, 17:10
.Terminate()
solltest du grundlegend immer vermeiden. Das erzeugt nämlich seinerseits Memory Leaks, wenn der Thread noch Speicher reserviert hat, den er nicht mehr freigeben kann. Ist beim Programmende allerdings im Grunde so oder so egal. Deine Bedingung trifft nicht zu, da .FreeOnTerminate := true
zwar den Thread freigibt, nicht aber die Referenz (deine Variable) auf nil
setzt.
Ich persönlich würde auf .FreeOnTerminate := true
verzichten und beim Programmende (z.B im OnClose
des MainForms) die .WaitFor()
Methode nutzen und danach den Thread selbstständig mit .Free()
freigeben. Du kannst zusätzlich auch noch Thread.Terminated()
überschreiben und dort eine private Statusvariable setzen. Für den Fall, dass der Thread Aufgaben in einer Schleife bearbeitet, kannst du dann dieses interne Feld als zusätzliche Schleifenbedingung nutzen.
Geändert von Zacherl ( 2. Mär 2019 um 17:12 Uhr)
|