Die einfachste Art wäre die Verwendung von
System.TMonitor
.
Delphi-Quellcode:
type
TForm1 = class(TForm)
IdHTTPServer1: TIdHTTPServer;
procedure IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo:
TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
private
FLock: TObject;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
FLock := TObject.Create;
end;
destructor TForm1.Destroy;
begin
FreeAndNil(FLock);
inherited;
end;
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo:
TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
System.TMonitor.Enter(FLock);
try
// hier jetzt die Abfragen bearbeiten
finally
System.TMonitor.Exit(FLock);
end;
end;
Eine CriticalSection würde auch funktionieren, aber
System.TMonitor
ist da performanter.
Wenn du auf die
GUI zugreifen musst (wieso überhaupt) dann musst du natürlich noch mit dem MainThread synchronisieren.