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?