Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: семафоры
Диалог специалистов АВОК > ОБЩИЙ ФОРУМ > Автоматизация систем > Экспертный клуб EVIKA: вопросы и ответы > Логический контроллер Logic Machine 2
Alferov
Всем Д.В.

Прошу помочь разобраться с семафорами.
Я так понимаю, этот функционал предназначался для корректной работы event-скриптов.
Пытаюсь попробовать расширить использование семафоров, и применить их в разруливании работы event-скрипта и resident-скрипта.
Конкретная задача:
Есть event-скрипт. Когда он выполняется, нужно блокировать работу resident-скрипта.
Это в принципе возможно? Если да, прошу привести пример.

Спасибо.
EVIKA_News
Александр Привет.
Документ Руководство программиста.Semaphore library поможет ?
Alferov
Видел, не помогает... пробую по аналогии, но не уверен что правильно делаю все )))
Там тоже только для event-скриптов все примеры. sad.gif
missile
Если я правильно понял, то можно в Event скрипте менять какую-либо глобальную переменную, а в resident её отслеживать (простое условие if в самом начале resident). Правда тут нужно смотреть время стартов скриптов...
Arrow
missile, к сожалению вы не правы.
evika_news правильно дала ссылку на руководство программиста, там разобран пример. Неважно это событийный скрипт или резидентный, код одинаковый.

Этой конструкцией вы открываете семафор. Он глобален для всех скриптов
semaphore = sem.open('eventlock') эту функцию вызываете в обоих скриптах
конструкция
while not semaphore:trywait() do
sleep(0.1)

end
-- делаем чего-нибудь

отслеживает когда первый семафор закроется и можно продолжать выполнение скрипта, а до этого крутится в цикле while.

Более подробно прочитать о работе в многопоточных системах вы можете прочитать в любой специализированной литературе.

Alferov
Ага, значит я правильно понял, что семафоры являются глобальными. А не только для event-скриптов.

спасибо за помощь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.