![]() |
Re: Thread innerhalb einer Komponente erzeugen und beenden
@Robert:
mache ich es so wie von Dir vorgeschlagen :
Delphi-Quellcode:
und rufe Cleanup am Ende des Execute des Threads auf, dann wird auch das Ereignis OnTerminate ausgelöst, setze ich aber da FCon2SvrThd := Nil;
if FCon2SvrThd <> Nil then begin
FCon2SvrThd.Terminate; FCon2SvrThd.WaitFor; end; if FCon2SvrThd <> Nil then beep; Wird folgender Fehler ausgelöst : Systemfehler. Code: 6. Das Handle ist ungültig. Noch ne Idee ? Gruß Data |
Re: Thread innerhalb einer Komponente erzeugen und beenden
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; |
Re: Thread innerhalb einer Komponente erzeugen und beenden
Hi Robert,
zu Deiner Überlegung das das OnThreadEnded unsinnig ist bin ich jetzt auch gekommen und habe es rausgeschmiessen. Jetzt habe ich eigentlich genau den gleichen Code den Du gepostet hast. Nur das ich den Destructor des Threads nicht überschrieben habe und somit auch kein StopThread habe. Trotzdem funktioniert es im Moment ! Wozu noch das StopThread im Destructor ? Gruß Data |
Re: Thread innerhalb einer Komponente erzeugen und beenden
Und wie beendest du jetzt den Thread?
Gruß Dale |
Re: Thread innerhalb einer Komponente erzeugen und beenden
Wo bitte ueberschreibe ich den Destruktor des Threads?
StopThread ist eine (am besten private) Methode von TTestComp und muss natuerlich in deren Destruktor aufgerufen werden, da ja der Thread noch laufen kann. |
Re: Thread innerhalb einer Komponente erzeugen und beenden
Hi Robert,
sorry mein Fehler hab mich total verlesen, Du überschreibst natürlich nicht den Destructor des Thread !! Das was Du mit StopThread im Destructor der Komponente macht habe ich dort direkt aufgerufen, d.h. ich habe die die Procedure StopThread nicht. Werde Start-/StopThread jetzt aber noch einbauen, ist aufgeräumter und kann an anderen Stellen der Komponente so wiederverwendet werden. Vielen Dank, Gruß Data |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz