Вопросы по User Event

Простейшие вопросы в области инженерной разработки
Ответить
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Вопросы по User Event

Сообщение jane_wild »

Ребята есть пара вопросов, касающихся UE
Понимаю, что такая конструкция бессмысленна, так как UE не зарегистрировано.
Тем не менее при генерации события никакой ошибки не происходит.
UE Questions.png
UE Questions.png (14.46 КБ) 1905 просмотров
Вопросы: Можно ли каким либо образом определить, что созданое событие было зарегестрировано?
Обязательно ли перед завершением работы делать Unregister UE, особенно если их много. Насколько это важно?
Если UE небыло зарегистрировано и в силу моей криворукости, программа продолжает генерировать события в никуда (ошибки то нет) насколько такая ситуация критична?
Ну и последнее, обязательно ли после создания UE перед завершением destroy его? Ведь программа завершается и по сути уже без разницы....
Спасибо.
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Вопросы по User Event

Сообщение Kosist »

Странно, что никто не ответил...
jane_wild писал(а):Вопросы: Можно ли каким либо образом определить, что созданое событие было зарегестрировано?
Боюсь, что нет. Тут нужно тестировать - исполняется ли Ваше сгенерированное событие, или нет; только так Вы определите, было ли оно правильно где-то зарегено.
jane_wild писал(а):Обязательно ли перед завершением работы делать Unregister UE, особенно если их много. Насколько это важно?
jane_wild писал(а):Ну и последнее, обязательно ли после создания UE перед завершением destroy его? Ведь программа завершается и по сути уже без разницы....
Закрывать все открытые ресурсы - это хорошая практика. Поэтому нужно это делать. Однако, Unregister UE - не так критичен, как Destroy UE.
А в общем - можете немного поэкспериментировать с подобным кодом:
Test UE.png
Фишка в том, что если событие не было зарегистрированно - то при генерации память не заполняется (посмотреть можно в Диспетчере задач). Но если есть регистрация - то сгенерированные события уже накапливаются в буффере данных, что чревато переполнением памяти, если не считывать их вовремя.
К слову - в случае с очередью, там все по другому; т.к. ссылка на генерацию/считывание - одна и та же. Если генерировать данные "в пустоту", без Enqueue Element, то само собой, что память будет переполняться.
Мы делили апельсин - много наших полегло...
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Вопросы по User Event

Сообщение Blackman »

Programmatically Inspect Event Queues
Matt Jacobson | National Instruments | CLA
https://forums.ni.com/t5/You-May-Not-Kn ... -p/3549367

Event Inspector Window - Unhandled Events: "how bad" are they?
https://forums.ni.com/t5/LabVIEW/Event- ... 5#M1028610

Презентация Jack Dunaway - LabVIEW-User-Events-Tips-Tricks-and-Sundry
ftp://LabVIEW_Videos:LabVIEW@frc.tecnov ... Tricks.avi

Инструкция как скачать здесь:
https://lavag.org/topic/17040-niweek-2013-videos/

Сами материалы презентации (на GitHub) удалены (а может куда-то перенесены) автором :(. Ситуация не ясна. Но есть копия :D :wink:
Вложения
master.zip
LabVIEW-User-Events-Tips-Tricks-and-Sundry
(922.06 КБ) 91 скачивание
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Re: Вопросы по User Event

Сообщение jane_wild »

Презентация Jack Dunaway - LabVIEW-User-Events-Tips-Tricks-and-Sundry
ftp://LabVIEW_Videos:LabVIEW@frc.tecnov ... Tricks.avi
Инструкция как скачать здесь:
https://lavag.org/topic/17040-niweek-2013-videos/
Скачать не получается, пробовала и total comander и упомянутый по ссылке FileZilla - не подключается к серверу FTP
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Вопросы по User Event

Сообщение dadreamer »

jane_wild писал(а):Вопросы: Можно ли каким либо образом определить, что созданое событие было зарегестрировано?
Именно готовых :vi: для этой цели нет, но в теории такое возможно, т.к. почти все механизмы синхронизации построены на оккьюренсах (это внутри :labview: прописано, ессно), и по логике вещей регистрация события означает присоединение обработчика событий к экземпляру события (ну, то есть, жёлтая эвент-структура после регистрации UE будет способна обрабатывать событие указанного типа с указанным именем и никакое иное, если оно не будет так же зарегистрировано). Однако, насколько я знаю, простых способов узнать о регистрации, кроме как отловить событие в структуре, нет.
jane_wild писал(а):Обязательно ли перед завершением работы делать Unregister UE, особенно если их много. Насколько это важно?
Как упоминалось выше, это правило хорошего стиля или тона в программировании. Однако если вы не сделаете unregister, ничего страшного не случится. Просто обработчик событий будет присоединён к указанному событию и будет готов обрабатывать события (даже при отсутствующей жёлтой эвент-структуре или когда программа вышла из неё). На моей памяти была такая программа, где вообще был пропущен unregister, но программа использовалась несколько лет, пока не была переписана по всем правилам хорошего тона. Я ни разу не наблюдал каких-то сбоев именно из-за отсутствия unregister, но стоит заметить, что сразу после выхода из структуры шёл destroy, а он неявно должен делать unregister для финализации обьектов.
jane_wild писал(а):Если UE небыло зарегистрировано и в силу моей криворукости, программа продолжает генерировать события в никуда (ошибки то нет) насколько такая ситуация критична?
Это уже от вашей программы зависит. Что будет, если какая-то часть программы не получит событие? Насколько это критично для программы? Если не особо, то можно не париться. Но не лучше ли сразу зарегистрировать все необходимые события сразу после их создания, например при инициализации программы?.. Тогда и не придётся гадать, а зарегистрировано ли событие.
jane_wild писал(а):Ну и последнее, обязательно ли после создания UE перед завершением destroy его? Ведь программа завершается и по сути уже без разницы....
Желательно. Ведь уничтожаете же очереди, уведомители и т.п.? Так и здесь. На каждое событие выделяется внутренняя структура в памяти. При регистрации структуре назначается собственный обработчик. Всё это хозяйство нужно удалить при завершении программы. Так что destroy лишним точно не будет. В противном случае у вас появится утечка памяти в 8 или более байтов на каждой итерации (запуске) программы. Конечно, если речь о работе в exe, то destroy можно пренебречь, т.к. при выгрузке программы все объекты будут финализированы. Но в IDE лучше придерживаться рекомендаций.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»