OBS/Adminhilfe/Semaphoren

Aus OBS Wiki
Zur Navigation springen Zur Suche springen
Für diese Seite wurde eine Zugriffsbeschränkung eingerichtet. Falls du diese Nachricht siehst, bist du nicht berechtigt, diese Seite einzusehen.

Dies ist eine zugriffsgeschützte Seite.


Admin-Hilfe

OBS-Administration / Installation
kundenspezifische Anpassungen
OBS Protokolle
Shop-Administration

Datei-Semaphoren

Unit

lib_Semaphore

Methoden und Funktionsweise

Die Unit enthält eine Klasse zum Verwalten von Datei-Semaphoren, dazu eine globale Variable der Klasse und globale Funktionen für den Zugriff auf Semaphoren in der Klasse. Die globale Variable heißt GL_Semaphore und wird per initialization beim Programmstart instanziiert. Um eine Semaphore anzulegen, kann die Instanz selbst verwendet werden. Die globalen Funktionen unterstützen die Anlage mehrerer Semaphoren auf einmal. Bei Übergabe mehrerer Semaphoren sind diese mit Komma, Zeilenumbruch (CRLF), Semikolon oder Pipe zu trennen. Alle Semaphoren werden in der Instanz angelegt. Beim schließen des Programms werden automatisch alle noch enthaltenen Semaphoren freigegeben.

Beispiele

Einfaches Lock in einer Methode

if (SEMA_New('MyLock')) then begin //Versucht eine Semaphore anzulegen; Datei: MyLock.Lock
    ...
    SEMA_Release('MyLock'); //Löschen der angelegten Semaphore
end;
ACHTUNG: Es ist darauf zu achten, dass die Methode SEMA_Release innerhalb der Bedingung aufgerufen wird!

Anlage Lock und Freigabe an anderer Stelle

var cSema : string='';

...

if (SEMA_New('MyLock',cSema)) then begin //Versucht eine Semaphore anzulegen; Datei: MyLock.Lock
    ...
end;

...

SEMA_Release(cSema); //Löschen der angelegten Semaphore

Werden Semaphoren benötigt, um z. B. den Zugriff auf bestimmte Listen oder Masken zu sperren, so muss im Create oder Init die Semaphore angelegt werden. Die Semaphore darf aber erst beim Schließen des Fensters wieder freigegeben werden. Um sich zu merken, welche Semaphore(n) am Ende freigegeben werden können, gibt es die Funktion SEMA_New auch mit einem Rückgabewert wurde die angelegten Semaphoren.

DB-Semaphoren

Unit

Base.DB

Methoden und Funktionsweise

DB-Sqmaphoren werden in der per Parameter mitgeteilen Datenbank-Session angelegt. Für den Zugriff gibt es die Methoden DB_LockSemaphore (Anlage), DB_UnLockSemaphore(Löschen) und DB_IsSemaphore (Prüfung).

ACHTUNG: Bei MySQL konnten wir schon feststellen, dass die angelegten DB_Semaphoren global für alle Sessions gelten, die von einem MySQL-Dienst verwaltet werden. Alle anderen Sessions sind dann nicht in der Lage eine DB-Semaphore mit gleichem Namen anzulegen. OBS-ergänzt den Datenbanknamen daher automatisch. Die maximale Länge für den Semaphoren-Namen ist 64. Es ist daher rauf zu achten den Namen der Semaphore möglichst kurz zu halten, damit der Datenbankname noch ergänzt werden kann.

NeuNum-Semaphoren

Unit

G_LockNeuNum

Methoden und Funktionsweise

Bei diesen Locks handelt es sich um DB-Semaphoren.