Delphi-PRAXiS
Seite 2 von 2     12

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Nur nacheinander abarbeiten bei http get (https://www.delphipraxis.net/200004-nur-nacheinander-abarbeiten-bei-http-get.html)

mjustin 10. Mär 2019 09:39

AW: Nur nacheinander abarbeiten bei http get
 
Zitat:

Zitat von Markus Effenberger (Beitrag 1427425)
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.

Zitat:

Zitat von Markus Effenberger (Beitrag 1427425)
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.


Zitat:

Zitat von Markus Effenberger (Beitrag 1427425)
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.

Zitat:

Zitat von Markus Effenberger (Beitrag 1427425)
Oder gibt es eine andere Möglichkeit?

synchronize und TThread.Queue verwenden

Markus Effenberger 15. Mär 2019 11:28

AW: Nur nacheinander abarbeiten bei http get
 
Hallo Schokohase,

Der Tipp mit System.TMonitor ist schon sehr interessant :)
Müsste man dann nicht statt FLock auch einfach das Hauptform in System.TMonitor.Enter(Hauptformular) reinschieben können?

Aber vielleicht ist auch meine ursprüngliche Frage etwas unpräzise gestellt. Momentan habe ich eine Software zu programmieren, die mir nicht bezahlt wird und ich möchte den Aufwand so gering wie möglich halten. - das Hauptform hat diverse Datenbank- und Tabellenobjekte sowie ein paar Grids, die per LiveBindungs miteinader verbunden sind. - Die GetRequests greifen nun auf die Tabellenobjekte zu, filtern ein bisschen herum, schreiben mal Daten in die Tabellen, lesen manchmal nur, und geben dann irgendwas über den GETRequest zurück.

"Ab und zu" crasht das halt noch ;)

Markus


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr.
Seite 2 von 2     12

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