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.