![]() |
AW: TIdTCPServer (Indy) und TClientSocket
Zitat:
Und das macht jeder Thread pro Connection, egal ob da etwas auf der Leitung angekommen ist oder nicht. Mit ReadLn legst du den schlafen, bis ReadLn etwas zurück liefert. PS: mit
Delphi-Quellcode:
kannst abfragen, ob da etwas zum lesen gibt.
if AContext.Connection.Socket.Readable() then begin
|
AW: TIdTCPServer (Indy) und TClientSocket
Ich denke (hoffe), dass folgendes zutrifft:
TForm1.IdTCPServerExecute(...) ist eine Ereignisbehandlung. TForm1.KeyPress(...) auch. KeyPress wird vom Mainthread selbst ausgelöst, wenn von Windows eine Message TasteGedrückt ansteht. KeyPress läuft also innerhalb des Mainthreads und ist somit (Main-)Threadsafe. IdTCPServerExecute wird jedoch von einem aus Indy erzeugten Thread heraus aufgerufen - also nicht aus dem Mainthread heraus. Wenn dort irgendwelche Schweinereien gemacht werden, die den Mainthread bzw. das Formular berühren, dann kann das zu Problemen führen. Innerhalb eines Thread-Kontextes sollte man nie Application.ProcessMessages und nie ShowMessages o.ä. aufrufen. Aufrufe, die den Mainthread berühren müssen über Synchronize aufgerufen werden, damit es keine Zugriffskonflikte mit dem Mainthread gibt. 2 Threads, die da weiterhelfen können: ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 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