Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy 10 TCPServer-Synchronize (https://www.delphipraxis.net/52193-indy-10-tcpserver-synchronize.html)

jbg 25. Aug 2005 10:20


Indy 10 TCPServer-Synchronize
 
Wo ist denn der TIdThread geblieben mit dem man bei IdTCPServer im OnExecute Ereignis mit dem Hauptthread-Synchronisieren konnte. Irgendwie finde ich im Moment keine einfache Möglichkeit, wie ich im OnExecute ein Synchronize machen kann. Bei Indy 9 war das noch ganz leicht AThread.Synchronize(methode). Aber bei Indy 10 wird jetzt ein TIdContext übergeben. Und das bietet keinen Zugang zum "Vater"-Thread.
Hat das vielleicht jemand herausgefunden, wie das geht? Oder stelle ich mich heute nur blöd an und die Lösung ist ganz einfach?

bernhard_LA 18. Jun 2012 17:07

AW: Indy 10 TCPServer-Synchronize
 
gab es für dieses alte Thema eigentlich eine Lösung ?

mjustin 18. Jun 2012 17:51

AW: Indy 10 TCPServer-Synchronize
 
Zitat:

Zitat von jbg (Beitrag 353396)
Wo ist denn der TIdThread geblieben mit dem man bei IdTCPServer im OnExecute Ereignis mit dem Hauptthread-Synchronisieren konnte. Irgendwie finde ich im Moment keine einfache Möglichkeit, wie ich im OnExecute ein Synchronize machen kann. Bei Indy 9 war das noch ganz leicht AThread.Synchronize(methode). Aber bei Indy 10 wird jetzt ein TIdContext übergeben. Und das bietet keinen Zugang zum "Vater"-Thread.
Hat das vielleicht jemand herausgefunden, wie das geht? Oder stelle ich mich heute nur blöd an und die Lösung ist ganz einfach?

Was ist der Vater-Thread, der Hauptthread der Anwendung oder der aktuell laufende Thread in dem OnExecute ausgeführt wird?

Falls Hauptthread der Anwendung gemeint ist:

* handelt es sich um eine GUI Anwendung (Server mit Benutzeroberfläche)? Dann könnte man synchronized verwenden (aber wahrscheinlich ist eine threadsichere Queue oder die Verwendung von Events oder IdNotify zur Kommunikation besser, da synchronized nicht mehr funktionieren wird wenn aus der GUI Anwendung eine Konsolen- oder Serviceanwendung gemacht wird)

* andernfalls (Konsolen- oder Serviceanwendung) muss man den Austausch mit dem Hauptthread anders lösen, zum Beispiel kann man Nachrichten in eine threadsichere Queue schreiben die dann aus anderen Threads gelesen wird

Falls der aktuell ausgeführte Thread des OnExecute gemeint ist: es kann mehr als einen geben!

* ab Indy 10 kann es sein, das eine einzige Verbindung zu verschiedenen Zeitpunkten von verschiedenen Threads behandelt wird, zum Beispiel kann der TCPServer das OnConnect der Verbindung von einem anderen Thread aus aufrufen als das erste OnExecute, und das nächste OnExecute wieder von einem anderen Thread. (Verwendung eines Threadpools).

Code:
"The events are still executing in a thread. In Indy 9, each connection was assigned to one thread. In Indy 10 in some cases it is possible that a single connection will be handled at different times by different threads. For example, the OnConnect may be called from on thread, the OnExecute from another, and the OnExecute yet another."


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz