Einzelnen Beitrag anzeigen

Markus Effenberger

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

Nur nacheinander abarbeiten bei http get

  Alt 9. Mär 2019, 20:36
Guten Abend Miteinander

Das Projekt nutzt einen idHTTPServer, um Daten bei entsprechender Anfrage an einen Client zu senden.

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 Problem ist: 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.

Ist eine Critical Section bereits eine Lösung? Oder gibt es eine andere Möglichkeit?

Code:
procedure TfrmMain.HTTPServerCommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);

  Var Dateiname, Antwort : string;
begin

(...)

//Hier soll bitte gewartet werden, bis kein anderer HTTPServerCommandGet mehr unterhalb dieser Position abgearbeitet wird. Ein paar Sekunden warten ist egal.

(...)

  if ARequestInfo.Params.Values['test'] <> ''
    then begin
      AResponseInfo.ContentText := 'GO' + ARequestInfo.Params.Values['test'];
    end;

  if ARequestInfo.Params.Values['Getliste'] <> ''
    then begin
      AResponseInfo.ContentText := komplette_Tabelle_als_String('liste');
    end;

  if ARequestInfo.Params.Values['GetOberkategorie'] <> ''
    then begin
      AResponseInfo.ContentText := komplette_Tabelle_als_String('Oberkategorie');
    end;

  if ARequestInfo.Params.Values['GetPersonalliste'] <> ''
    then begin
      AResponseInfo.ContentText := komplette_Tabelle_als_String('Personalliste');
    end;

  if ARequestInfo.Params.Values['GetUnterkategorie'] <> ''
    then begin
      AResponseInfo.ContentText := komplette_Tabelle_als_String('Unterkategorie');
    end;

  if ARequestInfo.Params.Values['GetUnternehmensdaten'] <> ''
    then begin
      AResponseInfo.ContentText := komplette_Tabelle_als_String('Unternehmensdaten');
    end;

end;
Ist die Frage verständlich?
  Mit Zitat antworten Zitat