Inhaltsverzeichnis
cpLeaveCriticalSectionGlob(Name:String)
Beschreibung
Dieser Befehl dient zum Absichern kritischer Programmbereiche. Es ist möglich, eine eigene Bezeichnung zu verwenden, z.B. zur Verwendung in Funktionen und Prozeduren
Wird ein Codeteil mit cpEnterCriticalSectionGlob(Name:String) … cpLeaveCriticalSectionGlob(Name:String) gekapselt, wird dieser Codeteil in jedem Fall abgearbeitet, auch wenn Ereignisse stattfinden, die die eingeschlossenen Befehlszeilen erneut ausführen möchten, bevor der gesamte Teil vollständig ausgeführt ist.
Gleichzeitig landen weitere Aufrufe dieses Bereichs in einer Warteschlange. Sie werden der Reihe nach ausgeführt. Kein Teil geht verloren.
Außerdem werden parallele Aufrufe gleicher Befehle verhindert und so Kollisionen im Programmablauf vermieden, die zu Fehlern führen können.
Es kann dadurch allerdings zu Verzögerungen im Ablauf der gesamten Zeitmessung kommen. Daher diese Befehle sparsam und nur dort einsetzen, wo es unabdingbar ist.
Syntax
Befehl | cpLeaveCriticalSectionGlob(Name:String) |
---|---|
Funktion | Absichern von Bereichen gegen ungewollte mehrfache Aufrufe mit Vergabe einer eigenen Bezeichnung. Nur gültig im Event, in dem der Code eingefügt ist. |
Typ | |
Version | Nutzbar ab Cockpit-XP Version 3.4.0 build 509 |
Codebeispiel
begin ... cpEnterCriticalSectionGlob('Test'); if cpGetPowerOnSlots() then cpPowerOnSlots(false) else cpPowerOnSlots(true); cpSleep(5000); cpLeaveCriticalSectionGlob('Test'); ... end.
Dieser Code prüft, ob Strom auf der Bahn ist. Ist das der Fall, wird der Bahnstrom abgeschaltet, ist der Strom aus, wird er aktiviert.
Allerdings ist die Befehlsfolge hier in einen kritischen Bereich gekapselt. Versucht irgendein anderes Ereignis, cpGetPowerOnSlots vor Ablauf der 5 sekündigen Wartezeit auszuführen, wird dieses Event hinten angestellt.
Das gilt innerhalb eines Events, z.B. KeyDown Event, NICHT global für das gesamte AddOn!
Weitere Informationen finden sich in der Cockpit-XP Dokumentation zu AddOns (CpXP-AddOn.pdf) auf den Seiten 17 und 18.