И снова очереди
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: И снова очереди
Ошибки я обрабатываю в потоках-циклах, а из потока у меня выходят кластеры без ошибок. Объединяются они в один для того, чтобы удостовериться, что все потоки закончены по принципу data flow.
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: И снова очереди
Обработка ошибок в таких многопоточных архитектурах это очень интересная тема, и явно тянет не на один пост.
ты имел в виду, "перед тем как удалять очереди и user events", да?eg писал(а):чтобы удостовериться, что все потоки закончены по принципу data flow
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: И снова очереди
В цикле где закрываешь референсы на очереди и события я бы поставил проверку валидности референса. А то если хоть один из массива окажется битый то все остальные после него не закроются. Во-вторых у типа variant есть атрибуты которые можно использовать для передачи служебной информации к данным. И хоть твой вариант выглядит более наглядным все же иногда стоит использовать атрибуты. В третьих: если ошибка будет повторяться в каждой итерации цикла представь как ты достанешь пользователя своим Dialog and User Interface. Что б этого не было, используют лог (или 2 лога) куда обычно пишется все состояние программы.taras_33 писал(а):
Следуя выше указанным советам я это и сделал, попутно добавив пару комментариев для таких же "чайников" как сам . Ничего не напутал? Значит можно использовать это как шаблон? Меня интересует обработка ошибок, я не совсем понимаю механизм. Зачем их всех собирать в кучку (в конце) и записывать в кластер, ни слова не сказав пользователю? Я так понимаю если уж мы их собрали, и произошла какая то ошибка, то нужно сообщить об этом, используя палитру Dialog and User Interface. Или я не прав?
Еще раз спасибо Eg и mzu2006
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: И снова очереди
Да, вариант с атрибутами я ещё не пробовал, думаю стоит посмотреть что это за зверь. А теперь об обработчике ошибок. У меня есть центральный обработчик ошибок, который отправляет возникшую ошибку, без открытия диалога в поток-индикатор-логгер лицевой панели.
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: И снова очереди
проверять не надо, закроются нормально, т.к. Release Queue/Destroy UE выполняется даже при пришедшей на error in ошибке. 8.6 online help destroy user eventPavel писал(а):В цикле где закрываешь референсы на очереди и события я бы поставил проверку валидности референса. А то если хоть один из массива окажется битый то все остальные после него не закроются.
На версии 7 я тестировал что быстрее: добавить ещё один элемент в кластер или использовать аттрибут варианта. Смутно помню, что аттрибут варианта получился медленнее. Как правило, тип передаваемых данных известен.Pavel писал(а): все же иногда стоит использовать атрибуты
А зачем 2 лога?Pavel писал(а):(или 2 лога)
Да, я бы тоже так делал. Иногда возникает необходимость классифицировать ошибки: с чем-то можно разобраться на месте (в потоке драйвера). Что-то можно записать в лог, что-то выдать пользователю.eg писал(а):У меня есть центральный обработчик ошибок, который отправляет возникшую ошибку, без открытия диалога в поток-индикатор-логгер лицевой панели.
Совершенно согласен. модальное окно диалога использовать не надо вообще. Как вариант: boolean indicators, которые загораются при ошибке в подсистеме, и кнопка сброса рядом. Или log с грамотной возможностью фильтрации.Pavel писал(а):ты достанешь пользователя своим Dialog and User Interface.
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: И снова очереди
Доброе время суток народ. Два дня мучений и причина найдена..... Но вопрос остался открытым. Суть в следующем. Имеется три параллельные циклы (юзер интерфейс, прибор с RS232, индикатор) комунникация с помощью очередей. Этот кусок кода (извлечение элемента из очереди)
повторяется неоднократно, следовательно был создан SubVI . Как оказалось в параллельный циклах одновременно этот SubVI не работает. Но стоит создать его копию с другим именем и включить в проект, все работает. Кто подскажет в чем дело?Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
FireFly
- expert
- Сообщения: 1321
- Зарегистрирован: 25 апр 2009, 08:58
- Награды: 2
- Версия LabVIEW: 2014
- Откуда: Санкт-Петербург
- Поблагодарили: 1 раз
Re: И снова очереди
VI Properties -> Execution -> Reentrant execution
Почитай
Почитай
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: И снова очереди
Спасибо мужики, снимаю шапку Все работает
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!