Re: Actor Framework
Добавлено: 27 дек 2015, 17:48
Все верно, в real time это не работает, я просто не думал что кто то начнет сразу компилировать. Нужно не только Open FP но еще и Close. Как то так
Я правда все эти дела оформляю в SubVI. Но здесь оставим как есть, для наглядности. Кроме того, что будет, если один из методов вернет ошибку?
Все правильно, Actor вылетит с ошибкой, которую впрочем можно отловить, обработать и принять решение останавливать Actor, вызвавший ошибку или shutdown всю программу, а может просто проигнорировать и продолжать работу, как ни в чем не бывало. Но есть проблема, если Вы решаете остановить Actor, верхний while loop останется работать, он то об ошибке в “нижнем while loop” ни ухом ни рылом. Поэтому нужно добавить UE, которое пригодится не только в случае с ошибками, но и в случае, когда Вам нужно остановить Actor из другого Actor-a
Вооот… А теперь представьте, что у Вас десяток Актеров c UI, и че для каждого создавать user event-ы? Нет конечно, нужно просто создать общего родителя и там сделать одну UE и пользоваться этим ивентом во всех детях (если нужно конечно) Другой пример, в своих проектах, каждый запускаемый actor TCP, UDP, Config и тд отчитывается главному, мол я такой то, запустился без ошибок.. Процесс запуска и инициализации я обычно показываю на splash screen, в виде progress bar, этот splash screen служит по совместительству Launcher-ом Главный - ага, все запустились? Молодцы! Можно показывать юзеру окно программы. Естественно этот отчет сделан в абстрактном классе (родителе), а не в каждом отдельном ребенке. И вообще используя OOP можно свести к минимуму дублирование кода, вот этим AF и пользуется. Actor это не просто параллельный цикл, это отдельный независимый модуль, который может жить независимо своей жизнью, принимать собственные решения, базируясь (или нет) на инструкциях “сверху” ООП достаточно большая тема выходящая за рамки этого форума. Следующий раз, когда меня посетит муза, (обычно с бодуна, а выпиваю я крайне редко) я добавлю к этому проектику, какой нибудь генератор чисел, который будет слать эти числа в главное окно программы.
Я правда все эти дела оформляю в SubVI. Но здесь оставим как есть, для наглядности. Кроме того, что будет, если один из методов вернет ошибку?
Все правильно, Actor вылетит с ошибкой, которую впрочем можно отловить, обработать и принять решение останавливать Actor, вызвавший ошибку или shutdown всю программу, а может просто проигнорировать и продолжать работу, как ни в чем не бывало. Но есть проблема, если Вы решаете остановить Actor, верхний while loop останется работать, он то об ошибке в “нижнем while loop” ни ухом ни рылом. Поэтому нужно добавить UE, которое пригодится не только в случае с ошибками, но и в случае, когда Вам нужно остановить Actor из другого Actor-a
Вооот… А теперь представьте, что у Вас десяток Актеров c UI, и че для каждого создавать user event-ы? Нет конечно, нужно просто создать общего родителя и там сделать одну UE и пользоваться этим ивентом во всех детях (если нужно конечно) Другой пример, в своих проектах, каждый запускаемый actor TCP, UDP, Config и тд отчитывается главному, мол я такой то, запустился без ошибок.. Процесс запуска и инициализации я обычно показываю на splash screen, в виде progress bar, этот splash screen служит по совместительству Launcher-ом Главный - ага, все запустились? Молодцы! Можно показывать юзеру окно программы. Естественно этот отчет сделан в абстрактном классе (родителе), а не в каждом отдельном ребенке. И вообще используя OOP можно свести к минимуму дублирование кода, вот этим AF и пользуется. Actor это не просто параллельный цикл, это отдельный независимый модуль, который может жить независимо своей жизнью, принимать собственные решения, базируясь (или нет) на инструкциях “сверху” ООП достаточно большая тема выходящая за рамки этого форума. Следующий раз, когда меня посетит муза, (обычно с бодуна, а выпиваю я крайне редко) я добавлю к этому проектику, какой нибудь генератор чисел, который будет слать эти числа в главное окно программы.