![]() |
Globale Variable für IntraWeb
Salute,
wie und wo definiere ich eine Globale Variable und wie greife ich auf diese zu...? Ich benötige so etwas wie einen Zähler, um zu ermitteln wieviel user Online sind... THX WEBSTER |
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:
Dieser Code is aus dem Stegreif - keine Garantie.
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; 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. |
Moin Darkstone,
warum nicht so:
Delphi-Quellcode:
?
begin
fSync.Enter; try Inc(fCounter); finally fSync.Leave; end; end; Sonst macht try/finally keinen Sinn. |
hast natürlich vollkommen recht - hab mich vertippt. Das try/finally war auch nur als Beispiel gedacht, bei "Inc(fCounter)" wird wohl kaum eine Exception auftreten und ist hier sicher Luxus...
|
Salute,
danke für Eure super Tipps..... WEBSTER |
Moin Darkstone,
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz