понял. спасибо. То ест если два асинхронных цикла пишут информацию в одну очередь, мы точно сказать не можем, какие данные запишутся первыми?Путаница:
piznyur_alex писал(а):
В какой момент данные появятся в конце очереди ПОТОКА 2?
очередь не принадлежит потоку. Я попробую ответить на смежные вопросы, а ты скажи попал я или нет, хорошо?
В очереди они появятся сразу после добавления.
Когда данные обработает поток 2? Тогда, когда дойдёт очередь выполняться до узла Dequeue Element.
piznyur_alex писал(а):
в какой момент в ПОТОКЕ 2 обновляются глобальные переменные?
глобальные переменные опять таки не принадлежат потоку. Содержимое переменной обновится сразу после записи.
Когда они поток их прочитает? тогда, когда дойдёт до узла Global Variable.
Коммуникация между параллельными потоками
- piznyur_alex
- beginner
- Сообщения: 43
- Зарегистрирован: 11 фев 2010, 14:24
- Версия LabVIEW: 2010
- Контактная информация:
Re: Коммуникация между параллельными потоками
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Коммуникация между параллельными потоками
Какой Enque элемент выполнится первым - те и запишутся.piznyur_alex писал(а):То ест если два асинхронных цикла пишут информацию в одну очередь, мы точно сказать не можем, какие данные запишутся первыми?
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Коммуникация между параллельными потоками
Итерация потока2 произойдёт только тогда, когда поток1 запишет данные в очередь. До этого поток2 будет "висеть", это и называется синхронизацией с помощью очереди.piznyur_alex писал(а):Здравствуйте. Есть такая ситуация. Есть два параллельных потока ПОТОК 1 и ПОТОК 2. ПОТОК 1 отправляет данные в ПОТОК 2. В какой момент данные появятся в конце очереди ПОТОКА 2? Я так понимаю в момент новой итерации ПОТОКА 2? И в какой момент в ПОТОКЕ 2 обновляются глобальные переменные?
Спасибо.
- piznyur_alex
- beginner
- Сообщения: 43
- Зарегистрирован: 11 фев 2010, 14:24
- Версия LabVIEW: 2010
- Контактная информация:
Re: Коммуникация между параллельными потоками
Добрый день. Есть еще вопросик. Есть два паралельных цикла которые получают данные с разной скоростью от двух разных приборов и передают эти данные в третий основной цикл. Подскажите пожалуйста, как обьеденить эти данные в третем цикле для проведения дальнейших расчетов. Думаю над functional global. Заранее спасибо.
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Коммуникация между параллельными потоками
Посмотрите программу: Синусоидальный сигналpiznyur_alex писал(а):Добрый день. Есть еще вопросик. Есть два паралельных цикла которые получают данные с разной скоростью от двух разных приборов и передают эти данные в третий основной цикл. Подскажите пожалуйста, как обьеденить эти данные в третем цикле для проведения дальнейших расчетов. Думаю над functional global. Заранее спасибо.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
Jakob Brontfeyn
- expert
- Сообщения: 1729
- Зарегистрирован: 28 фев 2008, 11:01
- Награды: 6
- Благодарил (а): 1 раз
- Контактная информация:
Re: Коммуникация между параллельными потоками
почему бы не сделать несколько VI и связать через глобалную переменнуюpiznyur_alex писал(а):Добрый день. Есть еще вопросик. Есть два паралельных цикла которые получают данные с разной скоростью от двух разных приборов и передают эти данные в третий основной цикл. Подскажите пожалуйста, как обьеденить эти данные в третем цикле для проведения дальнейших расчетов. Думаю над functional global. Заранее спасибо.
как здесь http://labviewportal.org/viewtopic.php? ... 728#p23964
Не один год применяю такую методику в сложных экспериментах,
работает безотказно.
- piznyur_alex
- beginner
- Сообщения: 43
- Зарегистрирован: 11 фев 2010, 14:24
- Версия LabVIEW: 2010
- Контактная информация:
Re: Коммуникация между параллельными потоками
Ок. Спасибо за советы. Разберусь с примером Синусоидный сигнал, а также попробую с глобальной переменной.
-
- junior
- Сообщения: 52
- Зарегистрирован: 02 фев 2012, 21:49
- Версия LabVIEW: 18
- Откуда: Москва
Re: Коммуникация между параллельными потоками
Добрый день.
У кого-нибудь возникала задача передавать одни и те же данные из одного цикла в несколько циклов?
Есть идеи? Как использовать одну очередь для передачи сразу в несколько циклов? Уничтажать данные, по мере полного считывания во всех циклах потребителя(так, чтобы они ещё и не повторялись). Функций очередей, на первый взгляд, недостаточно для этого... т.к. нет возможности очистить определённую область очереди. Может есть другие функции для этого?
Такая схема, при накоплении, будет очень прожорливой по отношению к памяти.
Может есть другие решения???
У кого-нибудь возникала задача передавать одни и те же данные из одного цикла в несколько циклов?
Есть идеи? Как использовать одну очередь для передачи сразу в несколько циклов? Уничтажать данные, по мере полного считывания во всех циклах потребителя(так, чтобы они ещё и не повторялись). Функций очередей, на первый взгляд, недостаточно для этого... т.к. нет возможности очистить определённую область очереди. Может есть другие функции для этого?
Такая схема, при накоплении, будет очень прожорливой по отношению к памяти.
Может есть другие решения???
-
Chupakabra
- professional
- Сообщения: 360
- Зарегистрирован: 21 янв 2009, 10:50
- Награды: 1
- Версия LabVIEW: 2015
- Откуда: Москва
- Поблагодарили: 4 раза
- Контактная информация:
Re: Коммуникация между параллельными потоками
Меня тоже интересует вопрос прожорливости, хотя думаю, что создание нескольких очередей преемлемое решение, облегчающее структуру программы. Может быть накладные расходы на каждую очередь/notifier невелики?Евгений Панин писал(а):Добрый день.
У кого-нибудь возникала задача передавать одни и те же данные из одного цикла в несколько циклов?
Есть идеи? Как использовать одну очередь для передачи сразу в несколько циклов? Уничтажать данные, по мере полного считывания во всех циклах потребителя(так, чтобы они ещё и не повторялись). Функций очередей, на первый взгляд, недостаточно для этого... т.к. нет возможности очистить определённую область очереди. Может есть другие функции для этого?
Такая схема, при накоплении, будет очень прожорливой по отношению к памяти.
Может есть другие решения???
Re: Коммуникация между параллельными потоками
Евгений Панин,
Задачу передачи данных из одного цикла в несколько сразу (причем количество принимающих циклов можно менять в процессе выполнения программы) проще всего решить с помощью событий.
Задачу передачи данных из одного цикла в несколько сразу (причем количество принимающих циклов можно менять в процессе выполнения программы) проще всего решить с помощью событий.
-
- user
- Сообщения: 73
- Зарегистрирован: 22 ноя 2011, 12:23
- Версия LabVIEW: 2011
- Контактная информация:
Re: Коммуникация между параллельными потоками
Я передаю данные между циклами так.
Эта вставляется в любое место программы, можно в разные циклы. read/write - задает режим чтения или записи данных. Недостаток один. Чтение либо запись происходят последовательно. Т.е. пока в одном цикле идет запись, другой ждет когда освободится.
можно например дополнить обнулением данных при первом запуске
Фактически это альтернатива глобальной переменой, потому что эту можно вставлять вообще куда угодно, в любые ваши под . Задержка от последовательного чтения/записи у меня никогда не давала о себе знать.
Эта вставляется в любое место программы, можно в разные циклы. read/write - задает режим чтения или записи данных. Недостаток один. Чтение либо запись происходят последовательно. Т.е. пока в одном цикле идет запись, другой ждет когда освободится.
можно например дополнить обнулением данных при первом запуске
Фактически это альтернатива глобальной переменой, потому что эту можно вставлять вообще куда угодно, в любые ваши под . Задержка от последовательного чтения/записи у меня никогда не давала о себе знать.
-
- junior
- Сообщения: 52
- Зарегистрирован: 02 фев 2012, 21:49
- Версия LabVIEW: 18
- Откуда: Москва
Re: Коммуникация между параллельными потоками
Есть такая "тема". Тоже пользуюсь такой моделью переменной. Главное, чтобы в настройках была последовательной. :)
-
- beginner
- Сообщения: 15
- Зарегистрирован: 31 июл 2014, 13:48
- Версия LabVIEW: 2010
- Контактная информация:
Re: Коммуникация между параллельными потоками
Подскажите пожалуйста как реализовать одновременную остановку 3х вложенных циклов внутри главного цикла одной кнопкой, которые вращаются в конструкции приведенной ниже?
Пример в начале статьи у меня к сожалению не заработал.
Пример в начале статьи у меня к сожалению не заработал.
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Коммуникация между параллельными потоками
Начнем с самого простого варианта:
- Вложения
-
- simple.png (10.01 КБ) 14075 просмотров
-
- beginner
- Сообщения: 15
- Зарегистрирован: 31 июл 2014, 13:48
- Версия LabVIEW: 2010
- Контактная информация:
Re: Коммуникация между параллельными потоками
Не работает такой вариант.Andrew Lunev писал(а):Начнем с самого простого варианта: