Перейти в хранилище документации
Обратиться в техническую поддержку
Методы Lock и Unlock используются для создания глобальной критической секции при необходимости обеспечения синхронизации скриптов, запускаемых в отдельных потоках. Метод Lock открывает критическую секцию, метод Unlock закрывает.
Внимание!
Рекомендуется по возможности избегать использования методов Lock и Unlock.
Синтаксис обращения к методам:
function Lock()
function Unlock()
Пример. По макрокоманде 1 посчитать общее количество лучей и реле, находящихся в тревоге. Подсчет объектов каждого типа производить одновременно (в отдельном скрипте). Результат записать в глобальную переменную counter.
Скрипт 1:
//Считается количество реле в тревоге var i = Number(0); if (Event.SourceType == "MACRO" && Event.SourceId== "1" && Event.Action == "RUN") { var msg = CreateMsg(); msg.StringToMsg(GetObjectIds("GRELE")); var objCount = msg.GetParam("id.count"); var k; for(k= 0; k < objCount; k++) if(GetObjectState("GRELE", msg.GetParam("id." + k))== "ALARM"){ Lock(); i = ITV_var("counter"); i++; ITV_var("counter")=i; Unlock(); } }
Скрипт 2:
//Считается количество лучей в тревоге var i = Number(0); if (Event.SourceType == "MACRO" && Event.SourceId== "1" && Event.Action == "RUN") { var msg = CreateMsg(); msg.StringToMsg(GetObjectIds("GRAY")); var objCount = msg.GetParam("id.count"); var k; for(k = 0; k < objCount; k++) if(GetObjectState("GRAY", msg.GetParam("id." + k))== "ALARMED"){ Lock(); i = ITV_var("counter"); i++; ITV_var("counter")=i; Unlock(); } }
Примечание.