Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#8

AW: MemoryLeaks mit s := I.ToString

  Alt 8. Nov 2014, 20:59
Dieses Problem hat man auch beim Thread, wenn er mit Suspend angehalten und dann verworfen wird.
Dieses Problem gibt es nicht, da man Threads niemals von außen anhält.
Man sagt einenm Thread er solle sich bitte anhalten und er macht das dan selber, an definierter/sicherer Stelle.

Das Problem liegt nicht nur beim Beenden, sondern auch beim ausführenden Code.
Beispiel: Du hälst den an, während er grade Speicher reserviert/freigibt, oder auf irgendeine Resource zugreift ... wenn der Thread dabei etwas lockt, dann wird das nie wieder entsperrt und kann womöglich auch andere Dinge blockieren, wie z.B. alles was im selben Speicherblock liegt und das dann nie wieder freigegeben werden kann.
Schlimmer noch, wenn du versuchst das freizugeben, landet man entweder in einem Deadlock oder es gibt zumindestens eine Exception (falls der Zugriff über ein Timeout verfügt.


Genauso das beenden eines Threads ... sowas hat der Thread gefälligst selber zu machen.
Alles andere sind maximal notfallmaßnahmen, bei welchen man damit rechnen muß, daß irgendwas kaputt geht.

Das ist genauso, also wenn man zum PC-Runterfahren den Stecker zieht.


Nicht umsonst gibt der Compiler nun endlich eine Warnmeldung aus, wenn man Suspend verwendet.
Delphi-Quellcode:
// This function is not intended to be used for thread synchronization.
procedure Suspend; deprecated;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Nov 2014 um 21:08 Uhr)
  Mit Zitat antworten Zitat