@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