![]() |
TThread -> Execute(SockId: Integer);
Ich habe ein Programm, was mehrere Threads erstellt, während der Laufzeit.
Nun habe ich das Problem, dass quasie bei der OnExecute-Prozedur eine Variable übergeben werden muss. Ist mir aber nciht möglich, da dann der Compiler rummeckert, dass sich die neue Prozedur von der alten unterscheidet:
Delphi-Quellcode:
Wie kann ich das realisieren?
TMyThread = class(TThread)
protected procedure Execute(SockId: Integer); end; (Ein neues Ereignis schreiben und dann quasie manuell aufhühren geht nicht, da es dann nicht als thread behandelt wird und die Hauptanwendung lahmt. |
Re: TThread -> Execute(SockId: Integer);
Moin!
1. IMHO sollte man die Parameterliste von Execute nicht ändern, da diese Methode nicht von dir später aufgerufen wird, sondern vom der originalen TThread Klasse und daher würde das dann nicht mehr klappen. 2. Du musst die Methode überschreiben - aber das würde er auch ordentlich schon vorbereiten, wenn du über Datei->Neu->Thread gegangen wärst... 3. Wieso der Execute Methode übergeben? Definiere eine Property im Thread... MfG Muetze1 |
Re: TThread -> Execute(SockId: Integer);
Zitat:
|
Re: TThread -> Execute(SockId: Integer);
Entweder versteh ich euch oder ihr mich net :D
Also, hier mal ausführlicher. Dabei wollte ich heute weiter arbeiten \: Ich habe eine eigene Klasse. Abgeleitet von der TIdTCPClient-Komponente. Halt mit eingebautem Thread:
Delphi-Quellcode:
TMyThread steht halt darüber.
TMyThread = class(TThread)
protected procedure Execute; override; end; TConnection = class(TIdTCPClient) Thread: TMyThread; end; Nun erstelle ich per DynArr von TConnection mehrere TIdTCPClienten und mehrere Threads. Jeder Thread muss nun für _seinen_ TCPClienten ReadLn ausführen, was ich realisieren wollte, indem ich TMyThread.Execute eine Integer Variable übergebe, die dann sagt, welchen Verbindung er abhören soll:
Delphi-Quellcode:
Wie kann ich das möglich machen?
TMyThread.Execute(SockId: Integer);
begin memDebug.Lines.Add(Connection[SockId].ReadLn); end; |
Re: TThread -> Execute(SockId: Integer);
Zitat:
Delphi-Quellcode:
type
TMyThread = class(TThread) private FSockedId: Integer; protected procedure Execute; override; public property SockedId: Integer read FSockedId write FSockedId; end;
Delphi-Quellcode:
Und so erstellst du dann den Thread...
procedure TMyThread.Execute;
begin // arbeite mit FSockedId end;
Delphi-Quellcode:
with TMyThread.Create(True) do
begin FreeOnTerminate := True; SockedId := 1234; Resume; end; |
Re: TThread -> Execute(SockId: Integer);
Ich idiot, da hätte ich drauf kommen können \: - Danke.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 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 by Thomas Breitkreuz