06.01.2013 Aufrufe

Migration - Smarthome-Components

Migration - Smarthome-Components

Migration - Smarthome-Components

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

IPS_SemaphoreEnter<br />

boolean IPS_SemaphoreEnter ( string $Name , integer $Wartezeit )<br />

Parameterliste<br />

Name Name, der die Semaphore beschreibt<br />

Wartezeit Millisekunden, die gewartet wird, bis der Befehl abbricht<br />

Rückgabewerte<br />

TRUE, wenn die Semaphore betreten wurde. FALSE, wenn die Semaphore vor Ablauf der Wartezeit nicht betreten<br />

werden konnte<br />

Beschreibung<br />

Dieser Befehl setzt ein Semaphor (ein Zeichen mit Signalwirkung), das dazu verwendet werden kann, den Start anderer<br />

Skripte zu verhindern. Ein Skript kann sich so vor konkurrierenden anderen Skripten schützen und natürlich auch vor<br />

anderen Instanzen von sich selbst.<br />

Der Befehl versucht, das Semaphor mit dem Namen SemaphorName zu setzen. Existiert das Semaphor bereits, wird die<br />

Abarbeitung des Skripts für die Zeitdauer Wartezeit (in Millisekunden) ausgesetz. Danach wird noch ein weiterer<br />

Versuch unternommen.<br />

In IP-Symcon können grundsätzlich mehrere Skripte gleichzeitig laufen. Solange ein Skript keinen exklusiven Zugriff auf<br />

Variablen oder System-Ressourcen benötigt, stellt dieser Fall kein Problem dar. Falls aber ein exklusiver Zugriff<br />

unumgänglich ist, kann mit dem Befehl ein Semaphor gesetzt werden. Der Befehl prüft zuerst, ob das Semaphor mit dem<br />

angegebenen Namen bereits gesetzt ist. Existiert es noch nicht, wird es durch den Befehl gesetzt und liefert TRUE als<br />

Rückmeldung. Alle anderen Skripte, die danach versuchen das selbe Semaphor zu setzen, müssen eine Warteschleife der<br />

Dauer Wartezeit durchlaufen. Nach Ablauf der Wartezeit versucht der Befehl erneut das Semaphor zu setzen. Ist er dabei<br />

erfolgreich, wird TRUE zurückgemeldet, andernfalls FALSE. Wenn man gewährleisten will, dass während der Laufzeit<br />

eines Skripts die von ihm verwendeten Daten nicht von anderen, gleichzeitig laufenden Skripten verfälscht werden, kann<br />

man diesen Befehl verwenden, um sich exklusiven Zugriff zu sichern.<br />

Bei der Verwendung dieses Befehls ist darauf zu achten, dass das Semaphor möglichst bald wieder zurückgesetzt wird.<br />

Beispiel<br />

if (IPS_SemaphoreEnter("KritischerPunkt", 1000))<br />

{<br />

}<br />

else<br />

{<br />

}<br />

// ...Kritische Befehle ausführen<br />

//Semaphore wieder freigeben!<br />

IPS_SemaphoreLeave("KritischerPunkt");<br />

// ...Keine ausführung Möglich. Ein anderes Skript nutzt den "KritischenPunkt"<br />

// für länger als 1 Sekunde, sodass unsere Wartezeit überschritten wird.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!