While Loop. Цикл в цикле

Общие принципы, проектирование, модуляризация, темплейты и шаблоны
Ответить
Аватара пользователя
Aleksey Feoktistov

Activity Gold Silver Black
leader
leader
Сообщения: 898
Зарегистрирован: 20 янв 2009, 00:15
Награды: 6
Версия LabVIEW: 2015
Откуда: Tyumen
Поблагодарили: 2 раза
Контактная информация:

While Loop. Цикл в цикле

Сообщение Aleksey Feoktistov »

В ходе экспериментов, наткнулся на интересную особенность использования While Loop. Если вложить цикл в цикл, то остановить такую программу вручную не так-то просто.
В данном варианте, для остановки хотя бы одного цикла, необходимо нажать поочередно клавиши:
- stop 1
- stop 2
- stop 3
и только после этого остановятся все циклы.
Два варианта представленных слева, не работают и работать не будут.
Как Вы смотрите на такую архитектуру программы и какие альтернативы можно использовать, дабы не попадать в такие ситуации?

Спасибо
Вложения
1.PNG
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: While Loop. Цикл в цикле

Сообщение IvanLis »

сейчас нет возможности попробовать.... нет LabVIEW. мнение чисто логическое, а не практическое
1. работоспособность 3 варианта сомнительна, т.к. после остановки внутреннего цикла начнет выполняться внешний, который в свою очередь снова запустит внутренний. необходимо менять "механику" кнопки
2. остановку нужно начинать с внутреннего цикла. попробуй переделать 1 вариант, если не получится измени "механику" кнопки
3. можно сделать через независимый индикатор
- по нажатии кнопки стоп во внутреннем цикле изменил его состояние f->t
- потом с локальных переменных подать сигнал true на стоп всех циклов
- после остановки всех циклов изменить значение индикатора t->f
4. я бы использовал регистр сдвига, пронизывающий все циклы и записывал сигнал остановки в него

p.s. для каких целей такую конструкцию можно использовать? или это чисто теоретический опыт?
Последний раз редактировалось IvanLis 16 июн 2011, 19:14, всего редактировалось 1 раз.
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: While Loop. Цикл в цикле

Сообщение Jakob Brontfeyn »

Aleksey Feoktistov писал(а):В ходе экспериментов, наткнулся на интересную особенность использования While Loop. Если вложить цикл в цикл, то остановить такую программу вручную не так-то просто.
В данном варианте, для остановки хотя бы одного цикла, необходимо нажать поочередно клавиши:
- stop 1
- stop 2
- stop 3
и только после этого остановятся все циклы.
Два варианта представленных слева, не работают и работать не будут.
Как Вы смотрите на такую архитектуру программы и какие альтернативы можно использовать, дабы не попадать в такие ситуации?

Спасибо
Primer
Вложения
stop_3.PNG
stop_3.PNG (6.37 КБ) 7077 просмотров
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: While Loop. Цикл в цикле

Сообщение mzu2006 »

Не совсем понятно, что внутри этих циклов и как соотносятся времена выполнения разных кусков. (Какой из циклов короткий, какой длинный).

Я бы разнес пользовательский интерфейс (кнопку "стоп") и функциональность. Я бы избегал подобной архитектуры, если один из этих циклов "длинный". Например, выделив его в параллельный цикл, запускаемый по notifier из основного.
Аватара пользователя
Aleksey Feoktistov

Activity Gold Silver Black
leader
leader
Сообщения: 898
Зарегистрирован: 20 янв 2009, 00:15
Награды: 6
Версия LabVIEW: 2015
Откуда: Tyumen
Поблагодарили: 2 раза
Контактная информация:

Re: While Loop. Цикл в цикле

Сообщение Aleksey Feoktistov »

mzu2006 писал(а):Не совсем понятно, что внутри этих циклов и как соотносятся времена выполнения разных кусков. (Какой из циклов короткий, какой длинный).

Я бы разнес пользовательский интерфейс (кнопку "стоп") и функциональность. Я бы избегал подобной архитектуры, если один из этих циклов "длинный". Например, выделив его в параллельный цикл, запускаемый по notifier из основного.
в общем все понятно, спасибо!
такой стиль программирования до добра не доведет.
всегда есть альтернативы, я их найду :wink:
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Модели программирования»