AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Nur nacheinander abarbeiten bei http get

Ein Thema von Markus Effenberger · begonnen am 9. Mär 2019 · letzter Beitrag vom 15. Mär 2019
Antwort Antwort
Seite 2 von 2     12   
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
Markus Effenberger

Registriert seit: 2. Jul 2014
44 Beiträge
 
Delphi 10.3 Rio
 
#12

AW: Nur nacheinander abarbeiten bei http get

  Alt 15. Mär 2019, 12:28
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

Geändert von Markus Effenberger (15. Mär 2019 um 12:55 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz