Вопросы по User Event

Простейшие вопросы в области инженерной разработки

Вопросы по User Event

Postby jane_wild on 13 Nov 2018, 19:36

Ребята есть пара вопросов, касающихся UE
Понимаю, что такая конструкция бессмысленна, так как UE не зарегистрировано.
Тем не менее при генерации события никакой ошибки не происходит.
UE Questions.png
UE Questions.png (14.46 KiB) Viewed 351 times

Вопросы: Можно ли каким либо образом определить, что созданое событие было зарегестрировано?
Обязательно ли перед завершением работы делать Unregister UE, особенно если их много. Насколько это важно?
Если UE небыло зарегистрировано и в силу моей криворукости, программа продолжает генерировать события в никуда (ошибки то нет) насколько такая ситуация критична?
Ну и последнее, обязательно ли после создания UE перед завершением destroy его? Ведь программа завершается и по сути уже без разницы....
Спасибо.
User avatar
jane_wild
assistant
assistant
 
Posts: 100
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2016
Karma: 5

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

Postby Kosist on 14 Nov 2018, 09:00

Странно, что никто не ответил...
jane_wild wrote:Вопросы: Можно ли каким либо образом определить, что созданое событие было зарегестрировано?

Боюсь, что нет. Тут нужно тестировать - исполняется ли Ваше сгенерированное событие, или нет; только так Вы определите, было ли оно правильно где-то зарегено.
jane_wild wrote:Обязательно ли перед завершением работы делать Unregister UE, особенно если их много. Насколько это важно?

jane_wild wrote:Ну и последнее, обязательно ли после создания UE перед завершением destroy его? Ведь программа завершается и по сути уже без разницы....

Закрывать все открытые ресурсы - это хорошая практика. Поэтому нужно это делать. Однако, Unregister UE - не так критичен, как Destroy UE.
А в общем - можете немного поэкспериментировать с подобным кодом:
Test UE.png

Фишка в том, что если событие не было зарегистрированно - то при генерации память не заполняется (посмотреть можно в Диспетчере задач). Но если есть регистрация - то сгенерированные события уже накапливаются в буффере данных, что чревато переполнением памяти, если не считывать их вовремя.
К слову - в случае с очередью, там все по другому; т.к. ссылка на генерацию/считывание - одна и та же. Если генерировать данные "в пустоту", без Enqueue Element, то само собой, что память будет переполняться.
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 900
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 253
CLAD I/O VIP students

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

Postby Blackman on 14 Nov 2018, 11:01

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:
Attachments
master.zip
LabVIEW-User-Events-Tips-Tricks-and-Sundry
(922.06 KiB) Downloaded 19 times
Blackman
leader
leader
 
Posts: 806
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 240
VIP

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

Postby jane_wild on 14 Nov 2018, 16:58

Презентация 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
User avatar
jane_wild
assistant
assistant
 
Posts: 100
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2016
Karma: 5

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

Postby dadreamer on 14 Nov 2018, 18:51

jane_wild wrote:Вопросы: Можно ли каким либо образом определить, что созданое событие было зарегестрировано?

Именно готовых :vi: для этой цели нет, но в теории такое возможно, т.к. почти все механизмы синхронизации построены на оккьюренсах (это внутри :labview: прописано, ессно), и по логике вещей регистрация события означает присоединение обработчика событий к экземпляру события (ну, то есть, жёлтая эвент-структура после регистрации UE будет способна обрабатывать событие указанного типа с указанным именем и никакое иное, если оно не будет так же зарегистрировано). Однако, насколько я знаю, простых способов узнать о регистрации, кроме как отловить событие в структуре, нет.
jane_wild wrote:Обязательно ли перед завершением работы делать Unregister UE, особенно если их много. Насколько это важно?

Как упоминалось выше, это правило хорошего стиля или тона в программировании. Однако если вы не сделаете unregister, ничего страшного не случится. Просто обработчик событий будет присоединён к указанному событию и будет готов обрабатывать события (даже при отсутствующей жёлтой эвент-структуре или когда программа вышла из неё). На моей памяти была такая программа, где вообще был пропущен unregister, но программа использовалась несколько лет, пока не была переписана по всем правилам хорошего тона. Я ни разу не наблюдал каких-то сбоев именно из-за отсутствия unregister, но стоит заметить, что сразу после выхода из структуры шёл destroy, а он неявно должен делать unregister для финализации обьектов.
jane_wild wrote:Если UE небыло зарегистрировано и в силу моей криворукости, программа продолжает генерировать события в никуда (ошибки то нет) насколько такая ситуация критична?

Это уже от вашей программы зависит. Что будет, если какая-то часть программы не получит событие? Насколько это критично для программы? Если не особо, то можно не париться. Но не лучше ли сразу зарегистрировать все необходимые события сразу после их создания, например при инициализации программы?.. Тогда и не придётся гадать, а зарегистрировано ли событие.
jane_wild wrote:Ну и последнее, обязательно ли после создания UE перед завершением destroy его? Ведь программа завершается и по сути уже без разницы....

Желательно. Ведь уничтожаете же очереди, уведомители и т.п.? Так и здесь. На каждое событие выделяется внутренняя структура в памяти. При регистрации структуре назначается собственный обработчик. Всё это хозяйство нужно удалить при завершении программы. Так что destroy лишним точно не будет. В противном случае у вас появится утечка памяти в 8 или более байтов на каждой итерации (запуске) программы. Конечно, если речь о работе в exe, то destroy можно пренебречь, т.к. при выгрузке программы все объекты будут финализированы. Но в IDE лучше придерживаться рекомендаций.
User avatar
dadreamer
professor
professor
 
Posts: 3157
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 803
I/O VIP vision internet


Return to Для чайников

Who is online

Users browsing this forum: Usss, Yandex and 24 guests

cron