Блокировка кнопки
-
- user
- Сообщения: 74
- Зарегистрирован: 29 апр 2016, 09:22
- Версия LabVIEW: 8.6
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Блокировка кнопки
Добрый день
Есть такая задача: сделать так, чтобы кнопка после запуска эвента становилась нерабочей
Я накидал пример, в нем после нажатия на кнопку она блокируется, на 2сек включается индикатор и затем кнопка снова работает. Проблема в том, что если тыкать по кнопке несколько раз пока горит индикатор, то она все равно срабатывает. Если же сделать ее неактивной вручную до запуска, то кнопка не срабатывает
ЗЫ: на "clear" не обращайте внимание, она служебная
Есть такая задача: сделать так, чтобы кнопка после запуска эвента становилась нерабочей
Я накидал пример, в нем после нажатия на кнопку она блокируется, на 2сек включается индикатор и затем кнопка снова работает. Проблема в том, что если тыкать по кнопке несколько раз пока горит индикатор, то она все равно срабатывает. Если же сделать ее неактивной вручную до запуска, то кнопка не срабатывает
ЗЫ: на "clear" не обращайте внимание, она служебная
- Вложения
-
- testing button.vi
- (10.83 КБ) 94 скачивания
LabVIEW 8.6
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Блокировка кнопки
Вы организовали задержку прямо в обработчике события. Пока вы не вышли из обработчика, он продолжает накапливать события. Сделайте кнопку неактивной и выйдите из кадра. Перенесите задержку в другое место - например, в кадр Timeout. Но не используйте Wait, а задайте таймаут 50-100мс и анализируйте разницу таймеров. Как будет больше 2000мс, сделаете кнопку активной.
- Вложения
-
- testing button-1.vi
- lv8.0
- (14.18 КБ) 79 скачиваний
Последний раз редактировалось dadreamer 09 ноя 2017, 14:53, всего редактировалось 1 раз.
-
- developer
- Сообщения: 257
- Зарегистрирован: 03 янв 2014, 19:37
- Версия LabVIEW: 2016
- Откуда: Украина, Киев
- Контактная информация:
Re: Блокировка кнопки
это чертовски странно, но если это всё внутри ивента нажатия - то действительно не работает.
при этом если вывести в параллельный цикл - то всё работает так, как нужно.
при этом если вывести в параллельный цикл - то всё работает так, как нужно.
колдооооовствооооо! (С)
-
- user
- Сообщения: 74
- Зарегистрирован: 29 апр 2016, 09:22
- Версия LabVIEW: 8.6
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Блокировка кнопки
дело в том, что эта программа - лишь имитация. вместо задержек и лампочки там будет подпрограмма на N минут с кучей задержек внутриdadreamer писал(а):Вы организовали задержку прямо в обработчике события. Пока вы не вышли из обработчика, он продолжает накапливать события. Сделайте кнопку неактивной и выйдите из кадра. Перенесите задержку в другое место - например, в кадр Timeout. Но не используйте Wait, а задайте таймаут 50-100мс и анализируйте разницу таймеров. Как будет больше 2000мс, сделаете кнопку активной.
LabVIEW 8.6
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Блокировка кнопки
Тогда выносите в отдельный цикл. В эвенте не стоит выполнять времязатратный код.GT21 писал(а):дело в том, что эта программа - лишь имитация. вместо задержек и лампочки там будет подпрограмма на N минут с кучей задержек внутри
-
- user
- Сообщения: 74
- Зарегистрирован: 29 апр 2016, 09:22
- Версия LabVIEW: 8.6
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Блокировка кнопки
а можно как-нибудь костылями обойтись? переделывать будет очень проблемноdadreamer писал(а):Тогда выносите в отдельный цикл. В эвенте не стоит выполнять времязатратный код.GT21 писал(а):дело в том, что эта программа - лишь имитация. вместо задержек и лампочки там будет подпрограмма на N минут с кучей задержек внутри
LabVIEW 8.6
-
- developer
- Сообщения: 257
- Зарегистрирован: 03 янв 2014, 19:37
- Версия LabVIEW: 2016
- Откуда: Украина, Киев
- Контактная информация:
Re: Блокировка кнопки
да там не то чтобы переделка. просто ставите ещё один цикл, связываете его с обработчиком событий при помощи нотифьера. нажали на кнопку - отправили на нотифьер уведомление, что кнопку надо выключить - делаете код - закончили делать код - шлёте нотифьер включить.
дело нескольких минут.
дело нескольких минут.
колдооооовствооооо! (С)
-
- user
- Сообщения: 74
- Зарегистрирован: 29 апр 2016, 09:22
- Версия LabVIEW: 8.6
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Блокировка кнопки
не совсем понял. так?
- Вложения
-
- testing button11.vi
- (12.17 КБ) 74 скачивания
LabVIEW 8.6
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Блокировка кнопки
Как уже указывали, очень плохая идея, в event структуре выполнять код, требующий какого то времени, либо сложных вычислений. Это структура предназначена в первую очередь для обслуживания UI (юзер интерфейса) Но если сильно хочется, то как советовал AlexanderKonoval держите..
- Вложения
-
- testing button_Notifier.vi
- (17.06 КБ) 83 скачивания
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!
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Блокировка кнопки
Старая тема. Не менее 10 лет
Снимите "галку" Lock panel until... или заблокируйте панель Set Busy на время выполнения подпрограммы.
В более поздних версиях LabVIEW можно поставить "галку" Limit maximum istances ... со значением 1 .
Снимите "галку" Lock panel until... или заблокируйте панель Set Busy на время выполнения подпрограммы.
В более поздних версиях LabVIEW можно поставить "галку" Limit maximum istances ... со значением 1 .
-
- user
- Сообщения: 74
- Зарегистрирован: 29 апр 2016, 09:22
- Версия LabVIEW: 8.6
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Блокировка кнопки
хм, стоило снять галочку и, похоже, события "нажатие кнопки" больше не встают в очередь (при условии, что в программе есть блокировка кнопки. если блокировки нет, то срабатывает)Blackman писал(а):Старая тема. Не менее 10 лет
Снимите "галку" Lock panel until...
LabVIEW 8.6