Einzelnen Beitrag anzeigen

DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

TThread gibt beim Beenden Speicherleck

  Alt 2. Mär 2019, 15:53
Stark vereinfacht habe ich folgende Threadklasse.
Erstellt wird die mit einem Aufruf von TTest.Run (passiert bei Programmstart und sieht schöner aus als irgendwas anonymes oder mit lokal deklarierten Klassenvariablen). Die private Deklaration von TestThread brauche ich extern nicht, deswegen private.

Das Sleep 10 Sekunden ist zum Testen da.
Wenn ich das Programm innerhalb der ersten 10 Sekunden schließe, bekomme ich einen Memory Leak.

Wie lässt sich das beheben, ohne am grundlegenden Aufbau der Klasse was zu ändern?
Der Thread soll bei Programmstart erzeugt werden aber erst noch warten, bis er seine Arbeit macht.

Delphi-Quellcode:
unit UTestThread;

interface

uses
 System.Classes, System.SysUtils;

type
 TTestThread = class(TThread)
 private
  {Private-Deklarationen}
 public
  {Public-Deklarationen}
  constructor Create;
 protected
  procedure Execute; override;
 end;

type
 TTest = record
 private
  class var TestThread: TTestThread;
 public
  class procedure Run; static;
 end;

implementation

constructor TTestThread.Create;
begin
 inherited Create;

 FreeOnTerminate := True;
end;

class procedure TTest.Run
begin
 TestThread := TTestThread.Create;
end;

procedure TTestThread.Execute;
begin
  Sleep(10000);
  
  GewinneImLotto;
end;

end.
  Mit Zitat antworten Zitat