Как вы работаете с множественным Disable/Enable
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Как вы работаете с множественным Disable/Enable
Сравнительный вопрос. Иногда, при сложной иерархии программы требуются множественные и/или замысловатые
ф-ии отключения контролов/индикаторов/меню и т.п. (Disable/Enable), посему вопрос, кто как осуществляет данные операции; через огромное кол-во свойств, через ссылки (reference) или кластеры/массивы ссылок и т.д?
ф-ии отключения контролов/индикаторов/меню и т.п. (Disable/Enable), посему вопрос, кто как осуществляет данные операции; через огромное кол-во свойств, через ссылки (reference) или кластеры/массивы ссылок и т.д?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как вы работаете с множественным Disable/Enable
А что такого замысловатого? Общий кластер с настройками передаётся во все приборы имеющие ЛП. При старте передаёшь этот кластер и после показываешь ЛП.
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: Как вы работаете с множественным Disable/Enable
Ничего замысловатого нет, способы решения разные
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Как вы работаете с множественным Disable/Enable
Большой кластер со ссылками на объекты лицевой панели приложения верхнего уровня
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
Chupakabra
- professional
- Сообщения: 360
- Зарегистрирован: 21 янв 2009, 10:50
- Награды: 1
- Версия LabVIEW: 2015
- Откуда: Москва
- Поблагодарили: 4 раза
- Контактная информация:
Re: Как вы работаете с множественным Disable/Enable
Когда не было сегментной трубы в LV DSC , приходилось кучу сегментов по отдельности программировать (цвет и состояние). Для этого объединял для всех сегментов законченного участка трубы reference в массивы референсов. и работал по-массивно.
-
- advanced
- Сообщения: 196
- Зарегистрирован: 01 ноя 2009, 23:18
- Версия LabVIEW: 2010
- Откуда: Москва
- Контактная информация:
Re: Как вы работаете с множественным Disable/Enable
Вот решил поэкспериментировать.
Всегда, когда работал с большим количеством однотипных элементов, создавал на каждый свойство и записывал в них значения через "Кадры". Сейчас решил сделать это через массив ссылок. И вот какая незадача - вроде программа становится меньше по обьему, а работает в 10 раз медленнее.
1. Вот так через кадры (время выполнения от 2 до 4 мс). 2. Через ссылки (время выполнения от 39 до 46 мс). Не подскажете в чем тут дело?
Исходник прилагаю
Всегда, когда работал с большим количеством однотипных элементов, создавал на каждый свойство и записывал в них значения через "Кадры". Сейчас решил сделать это через массив ссылок. И вот какая незадача - вроде программа становится меньше по обьему, а работает в 10 раз медленнее.
1. Вот так через кадры (время выполнения от 2 до 4 мс). 2. Через ссылки (время выполнения от 39 до 46 мс). Не подскажете в чем тут дело?
Исходник прилагаю
-
- VIP
- Сообщения: 1338
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2024
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 44 раза
- Контактная информация:
Re: Как вы работаете с множественным Disable/Enable
Это скорее всего оттого, что во втором случае LabVIEW 64 раза переключается в UI поток, а в первом случае оптимизатор понимает, что достаточно переключиться только один разAtom писал(а):Вот решил поэкспериментировать.
Всегда, когда работал с большим количеством однотипных элементов, создавал на каждый свойство и записывал в них значения через "Кадры". Сейчас решил сделать это через массив ссылок. И вот какая незадача - вроде программа становится меньше по обьему, а работает в 10 раз медленнее.
Не подскажете в чем тут дело?
Вот как можно это обойти:
Re: Как вы работаете с множественным Disable/Enable
Я делал так:
Все референсы на элементы управления (строковые, булевые и т.д.) переводил к более общему классу, из всех создавал массив. И затем в нужном месте вызывал , который брал в себя этот массив и соответствующий ему массив булевых констант - enable/disable. Сам пробегал циклом по всем референсам и делал свое дело. Единственный минус - нужно создавать массив булевых констант для каждого режима. Но это может сделать отдельная программа, которая берет на вход тайпдеф режимов работы, а на выходе имеет этот булевый массив.
Все референсы на элементы управления (строковые, булевые и т.д.) переводил к более общему классу, из всех создавал массив. И затем в нужном месте вызывал , который брал в себя этот массив и соответствующий ему массив булевых констант - enable/disable. Сам пробегал циклом по всем референсам и делал свое дело. Единственный минус - нужно создавать массив булевых констант для каждого режима. Но это может сделать отдельная программа, которая берет на вход тайпдеф режимов работы, а на выходе имеет этот булевый массив.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как вы работаете с множественным Disable/Enable
Немного не по теме, но почему бы не объединить 64 элемента в массив или кластер и дисейблить всё в одном? Я конечно понимаю, что это эксперимент, но мне кажется он немного бессмысленный. Ну а за Defer Panel Updates Андрею спасибо. Я всё точно не знал как его использовать, оказывается его нужно только на некоторое время отключать, а потом обратно включать.
-
- advanced
- Сообщения: 196
- Зарегистрирован: 01 ноя 2009, 23:18
- Версия LabVIEW: 2010
- Откуда: Москва
- Контактная информация:
Re: Как вы работаете с множественным Disable/Enable
Это просто фантастика!!!! Теперь все тормоза сняты, программа стала летать.AndreyDmitriev писал(а):
Вот как можно это обойти:
Спасибо огромное!!!
-
- advanced
- Сообщения: 196
- Зарегистрирован: 01 ноя 2009, 23:18
- Версия LabVIEW: 2010
- Откуда: Москва
- Контактная информация:
Re: Как вы работаете с множественным Disable/Enable
Дело в том ,что не так все просто. Это же только эксперимент, а в программе необходима не только одновременное выключение всех элеменов , но и выключение и работа их по отдельности, а на FP еще и перемещение каждого отдельного элемента в зависимости от размеров окнаeg писал(а):Немного не по теме, но почему бы не объединить 64 элемента в массив или кластер и дисейблить всё в одном? Я конечно понимаю, что это эксперимент, но мне кажется он немного бессмысленный.
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Как вы работаете с множественным Disable/Enable
Я бы описал набор состояний, сделал бы enum - состояние передней панели, и sub , которая бы говорила, что нужно сделать при переходе к нужному состоянию (просто case структура, на выходе - boolean массив visible, например). Что-то наподобие вот такого:Atom писал(а):но и выключение и работа их по отдельности
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows