Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: TThread gibt beim Beenden Speicherleck

  Alt 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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 2. Mär 2019 um 17:12 Uhr)
  Mit Zitat antworten Zitat