Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#6

AW: IdHTTPServer im Thread - Synchronität im OnCommand zum Thread

  Alt 21. Feb 2024, 12:27
@udo888
Bitte schön die Holzhammermethode
Delphi-Quellcode:
var DB_CS:TCriticalSection; // Globale CriticalSection für DB operationen am besten in eigener unit im initialize erzeugen
                            // Aber jetzt steht sie halt hier...es darf nur die eine geben um es einfach zu halten
                            

procedure TTsMain.HTTPServCommandGet(AThread: TIdPeerThread;
                                     ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
   sb : String;
   fkt : Integer;
   tsq : TStrings;
begin
   sb:= '';
   fkt:= -1;
   tsq:= ARequestInfo.Params;
   if Assigned(tsq) then
   begin
      fkt:= IntValues(tsq,CWsFunc);
      DB_CS.Aquire; // Alle anderen DB_CS.Aquires warten bis DB_CS.Release
                    // von dem thread mit der Aktiven Critical Section aufgerufen wird.
                    // Du hast jetzt 0% Nebenläufigkeit....
      try
         case fkt of
            001 : sb:= Mitteilung(fkt);
            010 : sb:= PersonalAnmeldung(tsq);
            011 : sb:= PersonalAnmelden(tsq);
            101 : ... usw

         end;

      finally
          DB_CS.release;
      end;   
   end;
   AResponseInfo.ContentText:= sb;
end;
Richtig wäre es gewesen pro thread eine eigene Datenbankverbindung aufzumachen. bzw. Das Datenbankverbindungsschwimmbecken zu nutzen
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat