Остановка задачи при Shutdown

Обсуждение SCADA-систем: Citect SCADA, Vijeo Citect, CitectSCADA, CitectFacilities, PowerLogic SCADA, PowerSCADA, MX4SCADA, Desigo Insight, Vijeo Look и HMI: Vijeo Designer, Operator Terminal Expert.
kvn
Сообщений в теме: 3
Сообщения: 105
Зарегистрирован: 08 сен 2015, 12:12
Откуда: Екатеринбург
Благодарил (а): 10 раз

Остановка задачи при Shutdown

#1

Сообщение kvn » 03 ноя 2015, 10:50

Добрый день!
Потребовалось остановить задачу перед закрытием Citect.
Есть в встроенной помощи для функции Shutdown() описание реализации такой задачи -
Note: If the event handler is interactive or with a long delay in processing the event, it needs to be called indirectly using the NewTask("EventHandler") function, and the actual handler, EventHandler(), needs to call Shutdown() with the CallEvent flag set to 0 from the handler if it decides the shutdown is permitted.
Но какова последовательность реализации - не понятно.

Есть запущенная задача, ее могу остановить с проверкой остановки и выдачи при этом флага.
Дальше потребуется наверное использовать OnEvent(32, Fn), где Fn функция остановки задачи.
И вызывать CallEvent(Window, nType) с параметром nType = 32?
Как то так?



Аватара пользователя
alex
Администратор
Сообщений в теме: 2
Сообщения: 1828
Зарегистрирован: 05 апр 2010, 21:58
Откуда: Москва
Благодарил (а): 53 раза
Поблагодарили: 116 раз
Контактная информация:

Re: Остановка задачи при Shutdown

#2

Сообщение alex » 05 ноя 2015, 12:16

Когда Вы подписываетесь на событие 32 в OnEvent, то ваша функция вызывается автоматически при вызове Shutdown c соответствующим параметром, поэтому вызов CallEvent, не обязательно. Но суть в том, что если надо гарантированное завершение всех запущенных задач при завершение работы Vijeo Citect, то завершение работы надо перевести в ручной режим, т.е. вызывать Shutdown в конце, когда все задачи уже остановлены, т.к. время завершения работы Vijeo Citect недетерминированно.



kvn
Сообщений в теме: 3
Сообщения: 105
Зарегистрирован: 08 сен 2015, 12:12
Откуда: Екатеринбург
Благодарил (а): 10 раз

Re: Остановка задачи при Shutdown

#3

Сообщение kvn » 05 ноя 2015, 14:10

Ок! Спасибо!
Реализовал в функции запускаемой от кнопки "Завершение работы" - сначала останавливаю задачу, дальше ожидаю флаг и после подъема флага остановки задачи выполняю Shutdown.



kvn
Сообщений в теме: 3
Сообщения: 105
Зарегистрирован: 08 сен 2015, 12:12
Откуда: Екатеринбург
Благодарил (а): 10 раз

Re: Остановка задачи при Shutdown

#4

Сообщение kvn » 05 ноя 2015, 15:23

А может лучше не выполнять остановку задачи перед Shutdown, а выполнить TaskKill(hTask)?
Это будет эффективнее остановки?



Аватара пользователя
alex
Администратор
Сообщений в теме: 2
Сообщения: 1828
Зарегистрирован: 05 апр 2010, 21:58
Откуда: Москва
Благодарил (а): 53 раза
Поблагодарили: 116 раз
Контактная информация:

Re: Остановка задачи при Shutdown

#5

Сообщение alex » 05 ноя 2015, 16:51

Лучше не использовать, т.к. задача будет прервана в непредсказуемый момент, и, в зависимости от того как задача написана, может повредить данные, либо не отдать захваченные ресурсы обратно в операционную систему, хотя как это реализовано в Vijeo Citect остается загадкой. Ну это, как наиболее распространенный эффект от таких действий, может быть например, утечка памяти.




Если эта тема может быть полезна другим, поделитесь ссылкой:

Вернуться в «Citect SCADA, Vijeo Citect, CitectSCADA, CitectFacilities, PowerLogic SCADA, PowerSCADA, MX4SCADA, Desigo Insight, Vijeo Look, Vijeo Designer, Operator Terminal Expert»