Hallo.
Ich habe mal wieder eine Frage zu
Indy (10)
Der Client hat ja keine eigenes OnExecute Event.
Darum wollte ich einen eigenen Thread verwenden, welcher ständig auf Daten abfragt.
Aber wie übergebe ich dem Thread die
Indy-Verbindung? Wenn ich einfach das
Indy-Objekt übergebe funktioniert es nicht.
So mache ich es bisher:
Delphi-Quellcode:
TMain =
class(TForm)
startClient: TButton;
IdTCPClient1: TIdTCPClient;
procedure startClientClick(Sender: TObject);
private
ClientThread: TClientThread;
end;
...
procedure TMain.startClientClick(Sender: TObject);
begin
self.IdTCPClient1.Port := 2010;
self.IdTCPClient1.Host := '
localhost';
self.IdTCPClient1.Connect;
self.ClientThread := TClientThread.Create(true);
self.ClientThread.Connection := self.IdTCPClient1;
self.ClientThread.OnDaten := self.Daten_empfangen;
self.ClientThread.Resume;
end;
Der Thread:
Delphi-Quellcode:
TClientThread = class(TThread)
private
FIndyClient: TidTCPClient;
FIndyString: String;
procedure ThreadEvent;
public
property Connection: TidTCPClient write FIndyClient;
procedure execute; override;
end;
...
procedure TClientThread.execute;
begin
while not Terminated do
begin
try
//lesen
self.FIndyString := self.FIndyClient.IOHandler.ReadLn;
//Event werfen
except
end;
end;
end;
Der Try-Blcok wird immer mit einer
exception abgebrochen. Es besteht im Htread aoch keine Verbindung
(wenn ich sie mit .Connected abfrage).
Was versteh ich da falsch?