Перейти в хранилище документации
Обратиться в техническую поддержку![]()
Предыдущая страница Следующая страница
Методы 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();
}
}
Примечание.