Wieso unelegant? Wenn du am Ende deiner Arbeit aufraeumst, dann ist das doch noch Arbeit.
Du denkst einfach zu kompliziert. Der OnThreadEnded ist Unsinn und fliegt weg.
Delphi-Quellcode:
destructor TTestComp.Destroy;
begin
// cleanup everything
// ...
StopThread;
inherited Destroy;
end;
procedure TTestComp.OnConnection2SvrThreadEnded(Sender: TObject);
begin
FCon2SvrThd := Nil;
end;
procedure TTestComp.StartThread;
begin
FCon2SvrThd := TTwConnection2SvrThread.Create(Self, FTcpCon);
FCon2SvrThd.OnTerminate:= OnConnection2SvrThreadEnded;
FCon2SvrThd.Resume;
end;
procedure TTestComp.StopThread;
begin
if Assigned(FCon2SvrThd) then
begin
FCon2SvrThd.Terminate;
FCon2SvrThd.WaitFor;
FCon2SvrThd := nil;
end;
end;