Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: TIdTCPServer (Indy) und TClientSocket

  Alt 17. Nov 2016, 15:30
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:
http://www.delphipraxis.net/190294-p...alsection.html
http://www.delphipraxis.net/190675-c...mziehen-2.html
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat