Hi!
Also grundsätzlich sind globale Zähler (vor allem in einer Multi-threaded Anwendung) eine grosse Gefahr, falsche Ergebnisse zu liefern. Wenn du wirklich globale Variablen brauchst, würde ich die in einer Klasse definieren und die Methoden Thread-Safe programmieren. Bsp:
Delphi-Quellcode:
TGlobalCounter = class
protected
fCounter: Integer;
fSync: TCriticalSection;
public
constructor Create;
destructor Destroy;
function Get_Counter: Integer;
procedure Set_Counter;
end;
constructor TGlobalCounter.Create;
begin
fSync := TCriticalSection.Create;
end;
destructor TGlobalCounter.Destroy;
begin
if fSync <> nil then
fSync.Destroy;
end;
function TGlobalCounter.Get_Counter: Integer;
begin
// die Read-Operation kann ganz normal durchgeführt werden.
Result := fCounter;
end;
procedure TGlobalCounter.Set_Counter;
begin
// Beim Write muss "serialisiert" werden.
fSync.Enter;
Inc(fCounter);
try
fSync.Leave;
finally
end;
end;
Dieser Code is aus dem Stegreif - keine Garantie.
Mehr zu TCriticalSection in der Hilfe.
Die Klasse kann global instanziiert werden und dann vielleicht im Application-Object (.Tag) hinterlegt werden - sofern bei Intraweb Application auch wirklich global ist.