Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#13

AW: For-Schleife im Thread wird nur einmal abgearbeitet

  Alt 7. Jun 2014, 10:43
Wird der TCPClient im Thread-Kontext erzeugt? Achtung: Im Thread-Konstruktor erzeugte Dinge sind nicht im Thread-Kontext, sondern in dem des Hauptthreads!!! Die meisten Komponenten, die irgendwie mit Sockets und ähnlichen WinAPIs hantieren sind oft nur in dem Kontext zu benutzen, in dem sie auch erstellt wurden. Du musst diese in der Execute-Methode erstellen.
Die Internet Direct (Indy) TCP Clientkomponenten können aus mehreren Threads verwendet werden, solange der Zugriffe threadsafe erfolgt. Ein Beispiel ist der Telnet Client "TIdTelnet" im Lib/Protocols Verzeichnis. Diese Klasse ist abgeleitet von TIdTCPClientCustom und startet einen Thread (TIdTelnetReadThread), der die vom Server gesendeten Daten empfängt. Die TIdTelnet Instanz wird zwar im Mainthread erzeugt, und aus dem Mainthread werden Befehle an den Server gesendet, aber aus dem ReadThread wird kontinuierlich auf den IOHandler der Komponente zugegriffen.

Möglicherweise besteht die Beschränkung (Verwendung nur im erzeugenden Thread) bei plattformgebundenen Komponenten wie ICS, die ein Windows Fensterhandle benötigen - aber mit ICS habe ich zuletzt 2008 kurz Kontakt gehabt.
Michael Justin
  Mit Zitat antworten Zitat