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."