Прерывания кубика VS

andrey-ka

Client
Регистрация
03.06.2018
Сообщения
855
Благодарностей
246
Баллы
43
Бывает такое, что код напишешь, но он в какой-то момент может зациклиться.
Когда-то в РМ добавили возможность через 5 секунд прервать выполнение кода.
Почти во всех циклах в C# кубиках у меня используется констукция:
C#:
if (((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted)
                    throw new Exception("Внешнее прерывание");
                if (Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode)
                    throw new Exception("Внешнее прерывание");
Что позволяет прекратить выполнение кубика без ожидания его завершения.

Что можно использовать для кубика VS?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Тоже нужно. один из моментов, что тормозит переход на VS глобально. а еще переменные в VS не создаются. может библиотек каких не хватает. хз в общем.
Вижу варианты.
1. долбать разработчиков, что бы они прокинули в VS -> ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted
2. Костыль в чистом и незамутнённом виде :ca: . где то на форуме видел код, который запускает параллельный поток с таймаутом. вот найти его и переделать под опрос нужных меток в зенке и записи в свои переменные. запускаем до кубика VS и стопаем после кубика VS. в самом VS опрашиваем свои метки. Не пробовал, но хочу попробовать сие чудо-юдо :-)

Рассматриваются и другие костыльные варианты :az:
 

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 228
Благодарностей
784
Баллы
113
а еще переменные в VS не создаются. может библиотек каких не хватает. хз в общем.
Каких переменных, project.Variables? Так туда и в PM из кода не добавить, только через UI. И зачем они нужны если разрабатывать в VS?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Каких переменных, project.Variables? Так туда и в PM из кода не добавить, только через UI. И зачем они нужны если разрабатывать в VS?
у меня создаются из кода c# , а вот в VS не хотят. но я не разбирался. тупо код закинул не работает и все на этом.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Итак, костылище как он есть :ca:
Пример приложил, проверил в ПМ и ЗП 7.4.0.0 , вроде работает.
Значит должна быть переменная InVS_External_Exit , ее в VS опрашиваем в нужных местах. При старте ее надо обязательно инициализировать. На скрине и в примере есть.

78018

Сам проект выглядит так, в первом кубике стартует асинхронная функция с таймером (таймер побольше надо ставить, что бы VS успел отработать), которая опрашивает метки зеннопостера и формирует InVS_External_Exit для работы VS
При обнаружении прерывания в ПМ или ЗП , InVS_External_Exit переводится в STOP и асинхронная функция выходит. VS выходит как дойдет до проверки InVS_External_Exit .
Если прерывания не было, то принудительно ее останавливаем. Кстати, наверно кубик остановки надо продублировать и на красной линии после VS. Ну это же пример :bk:

78019

код слямзил отсюда https://zennolab.com/discussion/threads/ostanovka-potokov-iz-obschego-koda.87667/#post-589411 :ah:

пруфы :ay:

78020
 

Вложения

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)