Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#11

AW: Nur nacheinander abarbeiten bei http get

  Alt 10. Mär 2019, 10:39
Es finden GUI-Zugriffe und Tabellen-Zugriffe statt und das crasht natürlich, wenn das parallel passiert. Und das tut es leider, weil ja jeder request in dem idHTTPServer einen eigenen Thread erzeugt.
Ja, das ist korrekt. Es wird aus dem Kontext des OnCommandGet Threads auf GUI/Tabellen zugegriffen, und das darf nur mit synchronize oder TThread.Queue geschehen.

Ob dies nun nur aus einem einzigen oder aus mehreren Server-Threads geschieht, macht für die 'crashs' keinen Unterschied. Auch ein einzelner Server-Thread würde crashen.

Um die Fertigstellung des Projektes etwas zu beschleunigen, möchte ich das Ereignis HTTPServerCommandGet so abändern, dass es niemals durch Threads parallel abgearbeitet wird, sondern immer alle Get-Requests nacheinander abgearbeitet werden.
Das ist daher keine Lösung des Problems, da auch dann noch aus dem Server-Thread auf GUI/Tabellen zugegriffen würde.


Ist eine Critical Section bereits eine Lösung?
Nein, auch eine Critical Section bewirkt nicht dass auf GUI/Tabellen aus dem Mainthread zugegriffen wird. Es wird aus dem aktuellen Thread zugegriffen.

Oder gibt es eine andere Möglichkeit?
synchronize und TThread.Queue verwenden
Michael Justin

Geändert von mjustin (10. Mär 2019 um 17:56 Uhr)
  Mit Zitat antworten Zitat