<< Inhaltsverzeichnis Suchen >>

ADD_SYNCHRONIZED

Funktion

Syntax:

ADD_SYNCHRONIZED(<NR>,<VON>,<BIS>,<ADD>)

<NR> = <NUM-AUSDRUCK>
<VON> = <NUM-AUSDRUCK>
<BIS> = <NUM-AUSDRUCK>
<ADD> = <NUM-AUSDRUCK>

Bedeutung:

Unter Java laufen Macros, die über einen Timer gestartet werden, als eigener Thread parallel zur gerade laufenden Verarbeitung ab. Dateizugriffe und Zugriffe auf gemeinsam benutzte Variablen müssen deshalb synchronisiert werden.

Mit den Funktionen SET_SYNCHRONIZED und ADD_SYNCHRONIZED werden 10 Integer-Variablen (<NR> = 0,...,9) zur Verfügung gestellt, über die die Synchronisation erfolgen kann.

Die Funktion ADD_SYNCHRONIZED prüft, ob der Wert der Variablen <NR> im Bereich von <VON> bis <BIS> liegt (<VON> <= Wert der Variablen <= <BIS>). Falls ja, wird <ADD> zum Wert der Variablen dazuaddiert und die Funktion liefert als Ergebnis 1. Liegt der Wert der Variablen <NR> nicht im Bereich von <VON> bis <BIS>, so wird der Wert der Variablen nicht verändert und ADD_SYNCHRONIZED liefert als Ergebnis -1.

Ist <NR> < 0 oder > 9, so liefert ADD_SYNCHRONIZED als Ergebnis -2. 

<NR>, <VON>, <BIS> und <ADD> müssen ganzzahlige Werte enthalten.

ADD_SYNCHRONIZED ist 'thread safe'. Dies bedeutet, daß sichergestellt ist, daß immer nur ein Thread auf die Variablen zugreifen kann und deshalb der Wert der Variablen immer wohl definiert ist.

Diese Funktion hat nur eine Wirkung unter Java. Sonst liefert sie als Ergebnis stets –1.

Beispiel:

ON TIMER MACRO LESEN.TERMIN
...

Macro LESEN.TERMIN:

/* Prüfen, ob Variable 2 den Wert 0 oder 1 hat.
/* Falls ja, Wert um 5 erhöhen
IF ADD_SYNCHRONIZED(2,0,1,5) = -1
THEN /*... Zugriff nicht möglich
ELSE ... Termin aus Datei TERMINE lesen
         /* Variablenwert wieder um 5 verringern
        IF ADD_SYNCHRONIZED(2,5,6,-5) = -1
        THEN  /* Zurücksetzen ist nicht möglich. Es muß sich dann um
                   /* einen Programmierfehler handeln, da ein anderer
                   /* Thread die Variable inzwischen auf einen anderen
                  /* Wert gesetzt hat.
        ENDIF
ENDIF                                                   

siehe auch:

SET_SYNCHRONIZED