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:
TMeinThread = class(TIdPeerThread)
procedure MacheWas;
end;
In
Indy 10 geht das so:
Delphi-Quellcode:
TMeinThread = class(TIdThreadWithTask)
procedure MacheWas;
end;
Dann hat man in
Indy 9 eine TIdTCPServer-Komponente benutzt und vor dem möglichen Aufbau der Verbindung
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:
IdSchedulerOfThreadDefault1.ThreadClass:=TMeinthread;
In der execute-Methode kam man unter
Indy 9 folgendermaßen an seinen Thread:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
TMeinthread(AThread).MacheWas;
end;
Unter
Indy 10 geht das so:
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