Einzelnen Beitrag anzeigen

Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

AW: Rechenintensiven Thread aufräumen

  Alt 9. Nov 2014, 13:42
Halt, warte: Du beendest das Programm während die Threads noch laufen und wunderst dich dann das es Speicherlecks gibt? Wenn du die Threads nicht "sauber" beendest, wird der Speicher nicht freigegeben.

Hier gibt es die Variante, eine Exception in einem Thread zu erzeugen. Nicht wirklich sauber, aber ziemlich clever.

Eine etwas saubere Lösung wäre es, dir ein TStream-Delegate zu erstellen, mit dem du die Berechnung aus einem anderem Thread stoppen kannst (durch Exceptions und/oder fehlgeschlagene Writes).


Was mich ein wenig wundert, ist dass du für die "Abschätzung" die eigentliche Berechnung ausführst und dann das Ergebnis wegschmeißt. Wenn der Benutzer sich dann entschieden hat, machst du die Kompression nochmal?

Der Compiler sowie die Hilfe sagen mir, TThread.Resume; sei veraltet. Allerdings erzeugt TThread.Start; bei mir immer eine Exception vom Typ EInvalidPointer
Erstellte den Thread nicht suspended! Der Konstruktor wird immer in dem Kontext des erstellenden Threads ausgeführt. Das Start ist damit völlig unnötig.

Geändert von BUG ( 9. Nov 2014 um 14:18 Uhr)
  Mit Zitat antworten Zitat