Dein Hinweis war möglicherweise der Schubs in die richtige Richtung. Du meinst also etwa in der Art:
Delphi-Quellcode:
type
TPingThread = class(TThread)
private
{ Private-Deklarationen }
FFB: TComplexClass;
protected
procedure Execute; override;
public
constructor Create(const AHost: string);
destructor Destroy; override;
property ReturnValue;
end;
constructor TPingThread.Create(const AHost: string);
begin
FreeOnTerminate:= True;
FFB:= TComplexClass.Create(AHost);
inherited Create(False);
end;
destructor TPingThread.Destroy;
begin
FFB.Free;
inherited;
end;
procedure TPingThread.Execute;
begin
// Sleep nur zu Zwecken des Debugging
Sleep(100);
if Assigned(FFB) then
ReturnValue:= Integer(FFB.Ping);
end;
Und dann in TfmMain
Delphi-Quellcode:
procedure TfmMain.FormCreate(Sender: TObject);
begin
// Die Zuweisung von FHostName lasse ich mal mangels Relevanz weg; ist ein privates Attribut der Klasse
FObject:= TComplexClass.Create(FHostName);
PingThreadStart;
end;
procedure TfmMain.PingThreadStart;
begin
FPingThread:= TPingThread.Create(FHostName);
FPingThread.OnTerminate:= PingThreadDone;
end;
procedure TfmMain.PingThreadDone(Sender: TObject);
var
Lsucc: Boolean;
begin
Lsucc:= Boolean(FPingThread.ReturnValue);
if Lsucc then
Self.Caption:= 'Connected to ' + FObject.HostName
else
MessageBox(Self.Handle, PChar(FObject.HostName + ' not available'), '', MB_OK or MB_ICONINFORMATION);
end;
Das funktioniert. Zwei Sachen stören mich:
- Redundanz durch die Erzeugung der zweiten Instanz von TComplexClass in TPingThread und ggf. Zuweisung der nötigen Eigenschaften, auch wenn letzteres derzeit zum Glück nicht nötig ist.
- Es gibt Speicherlecks, wenn der Thread vorzeitig terminiert (während TPingThread.Execute noch läuft):
Code:
---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:
1 - 12 bytes: TObject x 1
21 - 28 bytes: AnsiString x 1
61 - 68 bytes: Unknown x 1
69 - 76 bytes: TPingThread x 1
269 - 284 bytes: TComplexClass x 1
---------------------------
OK
---------------------------
Sind diese Lecks von Bedeutung?
Grüße
Dalai