Имеется контрол, изменяемый юзером, либо программно через свойство "Value (signaling)". В одном из потоков имеется ивент-структура, отслеживающая изменение этого контрола (Value change). Также в этом потоке, после выполнения ивент-структуры, считывается локальная переменная этого контрола. Вопрос про ситуацию изменения значения в контроле (вышеописанным способом).
Может ли так случиться, что уже после обнаружения события ивент-структурой, локальная переменная (при считывании после выполнения ивент-структуры) выдаст прежнее значение, то есть ещё не успеет обновиться? Возможно такое в принципе?
Обновление лок. переменной и ивент-структура
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Обновление лок. переменной и ивент-структура
Она может обновиться, но например в 6 порядке, так что на индикаторе Вы этого не заметите.Boris_K писал(а):Имеется контрол, изменяемый юзером, либо программно через свойство "Value (signaling)". В одном из потоков имеется ивент-структура, отслеживающая изменение этого контрола (Value change). Также в этом потоке, после выполнения ивент-структуры, считывается локальная переменная этого контрола. Вопрос про ситуацию изменения значения в контроле (вышеописанным способом).
Может ли так случиться, что уже после обнаружения события ивент-структурой, локальная переменная (при считывании после выполнения ивент-структуры) выдаст прежнее значение, то есть ещё не успеет обновиться? Возможно такое в принципе?
А зачем вызывать локальную переменную, если Event возвращает значение.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Re: Обновление лок. переменной и ивент-структура
Просто в моём случае это гораздо удобнее, а так, конечно, юзаю всегда NewVal. Но тут пришлось бы городить дополнительный код.А зачем вызывать локальную переменную, если Event возвращает значение.
Что значит "в 6 порядке"? На индикаторе я конечно не замечу, но вопрос в другом, может ли в принципе из неё "проскочить" по линии старое значение?Она может обновиться, но например в 6 порядке, так что на индикаторе Вы этого не заметите.
Race conditions - опасный и скользкий баг!
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Обновление лок. переменной и ивент-структура
Boris_K, как выглядит диаграмма в упрощённом виде? Как-то так или иначе?
Re: Обновление лок. переменной и ивент-структура
dadreamer, не так, не беспокойтесь насчёт последовательности выполнения Считывание локали у меня идёт строго после работы ивент-структуры, т. к. действия связаны потоком данных (из структуры выходят линии данных в кейс, и только там идёт считывание локали).
Только сам терминал контрола не находится в ивент-структуре.
Только сам терминал контрола не находится в ивент-структуре.
Race conditions - опасный и скользкий баг!
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Обновление лок. переменной и ивент-структура
Ну, а что тогда переживать? Если событие (value change) произошло и обработалось, то локалка гарантированно установится в это значение. Собственно, как и сам контрол, ибо не может быть, чтобы сперва произошло событие, а затем контрол принял новое значение (речь не о filter events, как я понимаю). У вас может произойти другой интересный случай. Если на участке от Event Structure до чтения из локалки стоит времязатратный код и пользователь ещё раз инициировал value change, то в очередь событий помещается новый эвент и (в зависимости от настроек Even Structure) блокируется панель. Какое значение выдаст локалка? Если провести простой эксперимент, то возможны два случая. Если стоит лок панели, то при очередном value change панель заблокируется, а после выполнения времязатратного кода локалка выдаст новое значение, таким образом, одно промежуточное значение вы не получите. (В этой ситуации юзер может щелкнуть по контролу один раз, а может щёлкать столько, сколько ему хочется. Даже если панель блокируется, события всё равно происходят, даже на заблокированном контроле. Поэтому будет столько итераций цикла, сколько раз юзер прощёлкал контрол. Локалка будет выдавать каждый раз очередное значение.) Если же лок не установлен, то при очередном value change панель не блокируется, а после выполнения времязатратного кода локалка выдаст последнее установленное значение, таким образом, вы не получите все промежуточные значения. (Снова, если юзер прощёлкал несколько раз, то будет столько же раз прокручиваться цикл. Локалка будет выдавать всегда самое последнее значение.)Boris_K писал(а):Считывание локали у меня идёт строго после работы ивент-структуры, т. к. действия связаны потоком данных (из структуры выходят линии данных в кейс, и только там идёт считывание локали).
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 5 Ответы
- 313 Просмотры
-
Последнее сообщение DrageFabeldyr