![]() |
Threads in Listen halten
Hi,
ich möchte unterschiedliche Threads in einer TList halten. z.B.
Delphi-Quellcode:
Die Thread tragen sich selbst beim Starten in eine TList ein und beim Beenden wieder aus.
ThreadA=class(TThread)
ThreadB=class(TThread) ThreadC=class(TThread) Jetzt möchte ich bei Programmende alle noch verbliebenen Thread terminieren. Allerdings kann ich wohl nicht mit
Delphi-Quellcode:
arbeiten, denn die IDE bietet mir bei
as TThread
Delphi-Quellcode:
kein Terminate an. Auch über die API function TerminateThread geht's zumindest nicht so einfach, weil ich dazu das Handle brauche.
(TList.items[i] as TThread).
Jetzt könnte ich natürlich auch das Händle in einer TList ablegen, aber mir gefiel dieser Weg erst mal besser, weil ich dann die TList auch noch anderweitig verwenden will. Meine Frage, warum kann ich bei Threads nicht auf die Mutterklasse casten? Welche elegante Lösung gibt es? Gruß Hobbycoder |
AW: Threads in Listen halten
Zitat:
|
AW: Threads in Listen halten
Zitat:
Aber der Compilert meckert mir das
Delphi-Quellcode:
mal mit der Fehlermeldung
(TL.Items[0] as TThread).Terminate; //TL ist TList
Code:
E2015: Operator ist auf diesen Operandentyp nicht anwendbar
|
AW: Threads in Listen halten
Wobei er da nicht wegen dem Terminate, sondern wegen des AS meckert. :zwinker:
Delphi-Quellcode:
AS auf einen Pointer anstatt auf eine Objektvariable.
(TObject(TL.Items[0]) as TThread).Terminate;
TThread(TL.Items[0]).Terminate; Pssst: TObjectList :roll: Mit den Generics sieht das ganze auch ganz nett aus.
Delphi-Quellcode:
var TL: TList<TThread>;
TL.Items[0].Terminate; TL[0].Terminate; |
AW: Threads in Listen halten
Delphis Compiler-Meldungen sind mal wieder super-hilfreich. Was er dir sagen möchte: Er kommt mit dem
Delphi-Quellcode:
nicht zurecht. Die TList gibt dir nur Pointer. Das könnte ein Zeiger auf alles sein. Und wenn es z.B. auf einen
(TL.Items[0] as TThread)
Delphi-Quellcode:
(oder Müll im Speicher) zeigt kannst du darauf kein
Integer
Delphi-Quellcode:
machen.
as
Du musst entweder dem Compiler sagen "Ich weiß was ich tue, das ist garantiert ein Zeiger auf einen TThread" und somit:
Delphi-Quellcode:
Oder du gehst von dieser schrecklichen
TThread(TL.Items[0]).Terminate();
Delphi-Quellcode:
weg und nimmst eine
TList
Delphi-Quellcode:
TList<TThread>
|
AW: Threads in Listen halten
Wieder was gelernt.
Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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