Обновление лок. переменной и ивент-структура

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума
Ответить
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Обновление лок. переменной и ивент-структура

Сообщение Boris_K »

Имеется контрол, изменяемый юзером, либо программно через свойство "Value (signaling)". В одном из потоков имеется ивент-структура, отслеживающая изменение этого контрола (Value change). Также в этом потоке, после выполнения ивент-структуры, считывается локальная переменная этого контрола. Вопрос про ситуацию изменения значения в контроле (вышеописанным способом).

Может ли так случиться, что уже после обнаружения события ивент-структурой, локальная переменная (при считывании после выполнения ивент-структуры) выдаст прежнее значение, то есть ещё не успеет обновиться? Возможно такое в принципе?
Race conditions - опасный и скользкий баг!
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Обновление лок. переменной и ивент-структура

Сообщение IvanLis »

Boris_K писал(а):Имеется контрол, изменяемый юзером, либо программно через свойство "Value (signaling)". В одном из потоков имеется ивент-структура, отслеживающая изменение этого контрола (Value change). Также в этом потоке, после выполнения ивент-структуры, считывается локальная переменная этого контрола. Вопрос про ситуацию изменения значения в контроле (вышеописанным способом).

Может ли так случиться, что уже после обнаружения события ивент-структурой, локальная переменная (при считывании после выполнения ивент-структуры) выдаст прежнее значение, то есть ещё не успеет обновиться? Возможно такое в принципе?
Она может обновиться, но например в 6 порядке, так что на индикаторе Вы этого не заметите.
А зачем вызывать локальную переменную, если Event возвращает значение.
Снимок экрана от 2017-05-31 20-09-31.png
Снимок экрана от 2017-05-31 20-09-31.png (6.39 КБ) 4950 просмотров
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Обновление лок. переменной и ивент-структура

Сообщение Boris_K »

А зачем вызывать локальную переменную, если Event возвращает значение.
Просто в моём случае это гораздо удобнее, а так, конечно, юзаю всегда NewVal. Но тут пришлось бы городить дополнительный код.
Она может обновиться, но например в 6 порядке, так что на индикаторе Вы этого не заметите.
Что значит "в 6 порядке"? На индикаторе я конечно не замечу, но вопрос в другом, может ли в принципе из неё "проскочить" по линии старое значение?
Race conditions - опасный и скользкий баг!
Аватара пользователя
dadreamer

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

Re: Обновление лок. переменной и ивент-структура

Сообщение dadreamer »

Boris_K, как выглядит диаграмма в упрощённом виде? Как-то так или иначе?
Вложения
2017-06-01_13-10-58.jpg
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Обновление лок. переменной и ивент-структура

Сообщение Boris_K »

dadreamer, не так, не беспокойтесь насчёт последовательности выполнения :wink: Считывание локали у меня идёт строго после работы ивент-структуры, т. к. действия связаны потоком данных (из структуры выходят линии данных в кейс, и только там идёт считывание локали).

Только сам терминал контрола не находится в ивент-структуре.
Race conditions - опасный и скользкий баг!
Аватара пользователя
dadreamer

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

Re: Обновление лок. переменной и ивент-структура

Сообщение dadreamer »

Boris_K писал(а):Считывание локали у меня идёт строго после работы ивент-структуры, т. к. действия связаны потоком данных (из структуры выходят линии данных в кейс, и только там идёт считывание локали).
Ну, а что тогда переживать? Если событие (value change) произошло и обработалось, то локалка гарантированно установится в это значение. Собственно, как и сам контрол, ибо не может быть, чтобы сперва произошло событие, а затем контрол принял новое значение (речь не о filter events, как я понимаю). У вас может произойти другой интересный случай. Если на участке от Event Structure до чтения из локалки стоит времязатратный код и пользователь ещё раз инициировал value change, то в очередь событий помещается новый эвент и (в зависимости от настроек Even Structure) блокируется панель. Какое значение выдаст локалка? Если провести простой эксперимент, то возможны два случая. Если стоит лок панели, то при очередном value change панель заблокируется, а после выполнения времязатратного кода локалка выдаст новое значение, таким образом, одно промежуточное значение вы не получите. (В этой ситуации юзер может щелкнуть по контролу один раз, а может щёлкать столько, сколько ему хочется. Даже если панель блокируется, события всё равно происходят, даже на заблокированном контроле. Поэтому будет столько итераций цикла, сколько раз юзер прощёлкал контрол. Локалка будет выдавать каждый раз очередное значение.) Если же лок не установлен, то при очередном value change панель не блокируется, а после выполнения времязатратного кода локалка выдаст последнее установленное значение, таким образом, вы не получите все промежуточные значения. (Снова, если юзер прощёлкал несколько раз, то будет столько же раз прокручиваться цикл. Локалка будет выдавать всегда самое последнее значение.)
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Общие»