![]() |
TCP-Server von Indy 9 auf 10 bringen
Ich bin leider gezwungen, meine tadellos funktionierenden Netzwerkfunktion von Indy 9 auf 10 zu bringen, da Indy 9 die webDAV-Komponente nicht hat. Wie schon im Nachbarthema besprochen, ist die Doku dazu leider eher übersichtlich. Vielleicht hilft ja ein kleiner Überblick über meine bereits erfolgreichen Schritte mal anderen. Also in Indy 9 definiert man seinen eigenen Thread
Delphi-Quellcode:
In Indy 10 geht das so:
TMeinThread = class(TIdPeerThread)
procedure MacheWas; end;
Delphi-Quellcode:
Dann hat man in Indy 9 eine TIdTCPServer-Komponente benutzt und vor dem möglichen Aufbau der Verbindung
TMeinThread = class(TIdThreadWithTask)
procedure MacheWas; end;
Delphi-Quellcode:
IdTCPServer1.ThreadClass:=TMeinThread;
definiert. Damit wurde für jede eingehende Verbindung eine Instanz von TMeinThread erzeugt. In Indy 10 braucht man für dieses Verhalten neben der Serverkomponente noch eine Komponente TIdSchedulerOfThreadDefault und stellt beim Server die Eigenschaft Scheduler auf diese Komponente. Und wieder vor dem möglichen Aufbau der Verbindung:
Delphi-Quellcode:
IdSchedulerOfThreadDefault1.ThreadClass:=TMeinthread;
In der execute-Methode kam man unter Indy 9 folgendermaßen an seinen Thread:
Delphi-Quellcode:
Unter Indy 10 geht das so:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin TMeinthread(AThread).MacheWas; end;
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
begin TMeinthread(TIdYarnOfThread(AContext.Yarn).Thread).MacheWas; end; Und jetzt hab ich den Eindruck, dass sich das Verhalten der connection was geändert hat. Unter Indy 9 war das ja ein member des Threads. Ich hab es jetzt als eigenes Member ergänzt und setze es beim connect auf AContext.Connection, um dann später Daten drüber zu verschicken/empfangen. Meine Anwendung macht dafür einen weiteren Thread zum Versenden, der nicht blockierend ist, während das Lesen der Daten im "TMeinthread" blockieren ist. Beides nutzt j dieselbe connection, was bisher auch tadellos lief. Jetzt verhält sich das Ganze aber seltsam. ich hab's noch nicht ganz durchdrungen, es scheint aber so zu sein, dass der Sendethread auch auf den Lesethread rückwirkt oder sowas. Kann mir jemand einen Denkanstoß geben? Carsten |
AW: TCP-Server von Indy 9 auf 10 bringen
Mein Problemwar wohl nur ein dummer Programmierfehler. Also da läuft sonst alles wie früher, wenn man meine Änderungen oben eingebaut hat.
Carsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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