Библиотека "Tasking"
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Библиотека "Tasking"
Выкладываю свою библитотеку для общения между потоками в программе, которой на данный момент пользуюсь. Распаковать в папку Programm Files->National Instruments->LabVIEW->Userlib.
С помощью этих приборов можно организовать общение между параллельными потоками. Все приборы записи и чтения имеют входы и выходы "команда" и "данные".
Если возникнут вопросы по использованию спрашивайте. В общем принцип общения я обьяснил в следующих темах:
/viewtopic.php?f=23&t=153
/viewtopic.php?f=23&t=159
/viewtopic.php?f=23&t=504
С помощью этих приборов можно организовать общение между параллельными потоками. Все приборы записи и чтения имеют входы и выходы "команда" и "данные".
Если возникнут вопросы по использованию спрашивайте. В общем принцип общения я обьяснил в следующих темах:
/viewtopic.php?f=23&t=153
/viewtopic.php?f=23&t=159
/viewtopic.php?f=23&t=504
- Вложения
-
- Tasking.zip
- LV 8.2
- (100.47 КБ) 2399 скачиваний
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Библиотека "Tasking"
Библиотечка мне понравилась, спасибо.
Есть только один ньюанс: refnum на очередь теоретически действителен только пока та VI, что его сделала
работает. (Иногда, случайно, он бывает действителен и позже - сборщик мусора запускается асинхронно).
Т.е. в Labview 7.1 я запускал "демон", в котором заводилась эта очередь.
Вопрос: а как это правило работает с классами? Не кроется ли здесь коварная западня?
Есть только один ньюанс: refnum на очередь теоретически действителен только пока та VI, что его сделала
работает. (Иногда, случайно, он бывает действителен и позже - сборщик мусора запускается асинхронно).
Т.е. в Labview 7.1 я запускал "демон", в котором заводилась эта очередь.
Вопрос: а как это правило работает с классами? Не кроется ли здесь коварная западня?
Правила форума (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: Библиотека "Tasking"
Прибор Tasking Open это самый первый прибор во всей программе. Из него передаётся выход на все входы всех параллельных потоков. В общем референсы на все очереди открываются именно там, а не в каждом потоке свой референс поотдельности. Дла чего? А для того, что бы все потоки уже заранее знали все референсы на все очереди и могли друг другу посылать команды.
Прибор Tasking Close это самый последний прибор во всей программе. Он должен выполнятся только после того, как все параллельные потоки закончили свою работу.
Остальные приборы применяются для коммуникации между потоками.
Сборщик мусора (я подозреваю это что то наподобии Error Handler) можешь запускать отдельным потоком и отправлять ему все возникшие ошибки из любого другого параллельного потока, а он эти ошибки обрабатывает - например записывает в файл ошибок, отправляет некоторые из них на лицевую панель или показывает диалог ошибки.
Вот на картинке обведены Tasking Open, Tasking Close и все параллельные потоки в программе.
Прибор Tasking Close это самый последний прибор во всей программе. Он должен выполнятся только после того, как все параллельные потоки закончили свою работу.
Остальные приборы применяются для коммуникации между потоками.
Сборщик мусора (я подозреваю это что то наподобии Error Handler) можешь запускать отдельным потоком и отправлять ему все возникшие ошибки из любого другого параллельного потока, а он эти ошибки обрабатывает - например записывает в файл ошибок, отправляет некоторые из них на лицевую панель или показывает диалог ошибки.
Вот на картинке обведены Tasking Open, Tasking Close и все параллельные потоки в программе.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Библиотека "Tasking"
Ну а если хочется немного динамики в программе. То у меня есть полностью динамичная библиотека под названием Publish Subscriber. Там сначала запускается один единственный поток - Supervisor (или Dispatcher), который динамически регистрирует все референсы и записывает их в таблицу.
Каждый параллельный поток не общается напрямую друг с другом, а отправляет команды этому диспетчеру. А диспетчер в свою очередь, смотрит по таблице кому предназначена эта команда и перенаправляет команду нужному потоку.
Эта конструкция мне нравится намного больше чем статическая и я собираюсь переписать её на ООП. Вот тогда будет самый настоящий переворот!
Каждый параллельный поток не общается напрямую друг с другом, а отправляет команды этому диспетчеру. А диспетчер в свою очередь, смотрит по таблице кому предназначена эта команда и перенаправляет команду нужному потоку.
Эта конструкция мне нравится намного больше чем статическая и я собираюсь переписать её на ООП. Вот тогда будет самый настоящий переворот!
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Библиотека "Tasking"
Это понятно. Я, наверное, плохо объяснил. Проблема поджидает, тогда, когда этот прибор перейдёт в состояние idle, и Front Panel которых не загружена.eg писал(а):Прибор Tasking Open это самый первый прибор во всей программе.
запускается LabVIEW - это классический garbage collector, которй уничтожает все references, которые были созданы приборами перешедшими в состояние idle и Front Panel которых не загружена.eg писал(а):Сборщик мусора
Я спрашивал, срабатывает ли он в случае использования классов. Видимо, да.
eg писал(а):Ну а если хочется немного динамики в программе.
eg писал(а):Там сначала запускается один единственный поток - Supervisor (или Dispatcher), который динамически регистрирует все референсы и записывает их в таблицу.
О-о-о вот это мне нравится больше. Например, при использовании такого механизма log не прервётся от запуска к запуску приложения, что важно.
жду с нетерпениемeg писал(а):я собираюсь переписать её на ООП. Вот тогда будет самый настоящий переворот!
Правила форума (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: Библиотека "Tasking"
Ещё раз перечитал, и теперь у меня вопрос - с чего ты это взял? Или я чего то недопонимаю?mzu2006 писал(а): Есть только один ньюанс: refnum на очередь теоретически действителен только пока та VI, что его сделала работает.
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Библиотека "Tasking"
Факт: когда прибор, в котором создалась ссылка на очередь, переходит в состояние idle, то очередь уничтожается.
(запусти свой первый прибор, запиши его результат в global. потом запусти, например, последний прибор, на вход которго, подаётся результат из этой global - всё - ошибка)
Использовать твою библиотеку можно строго так, как ты используешь в приведённом выше примере - т.е. когда Tasking Open VI - это subVI главной VI, которая прекращает работу (тем самым переводя Tasking Open в состояние idle) только в конце работы ппрограммы.
Мне очень нравится принцип взаимодействия частей программы заложенный в этой библиотеке. Но хотелось бы, чтобы не было привязанности к определённой архитектуре. Например, если у тебя главная VI в какой-то момент выгружается из памяти (например, запустив другую VI через VI сервер), то очереди будут удалены, и такой механизм не работает. Не сработает и запуск через VI сервер.
Поэтому я и написал, что динамически мне нравится больше. Сам я запускаю daemon который регистрирует все такие обращения. Daemon работает не зависимо от основной VI.
К сожалению от приложения к приложению daemon пишется заново.
(запусти свой первый прибор, запиши его результат в global. потом запусти, например, последний прибор, на вход которго, подаётся результат из этой global - всё - ошибка)
Использовать твою библиотеку можно строго так, как ты используешь в приведённом выше примере - т.е. когда Tasking Open VI - это subVI главной VI, которая прекращает работу (тем самым переводя Tasking Open в состояние idle) только в конце работы ппрограммы.
Мне очень нравится принцип взаимодействия частей программы заложенный в этой библиотеке. Но хотелось бы, чтобы не было привязанности к определённой архитектуре. Например, если у тебя главная VI в какой-то момент выгружается из памяти (например, запустив другую VI через VI сервер), то очереди будут удалены, и такой механизм не работает. Не сработает и запуск через VI сервер.
Поэтому я и написал, что динамически мне нравится больше. Сам я запускаю daemon который регистрирует все такие обращения. Daemon работает не зависимо от основной VI.
К сожалению от приложения к приложению daemon пишется заново.
Правила форума (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
- Контактная информация:
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Библиотека "Tasking"
Усложняем задачу и добавляем ещё один параллельный цикл. Теперь верхний отсылает в средний команду "get", средний генерирует число и отправляет его в нижний цикл, а нижний добавляет единичку и отправляет в верхний.
- Вложения
-
- Tasking_Example.vi
- (33.58 КБ) 301 скачивание
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Библиотека "Tasking"
Ну и конечно же можно для экономии места в блоковой диаграмме, да и вообще для лучшего обзора, поместить два нижних цикла в подприборы. Вот так, шаг за шагом, создаются мои проги с использованием этой библиотеки.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Библиотека "Tasking"
Ну а сам смысл такой конструкции в том, что каждый такой параллельный цикл имеет своё предназначение,т.е. должен выполнять какую то определённую работу и поэтому такой прибор называется Task.
Для примера:
один прибор отвечает за главную лицевую панель (т.е. генерирует команды по нажатию на кнопки)
другой прибор считывает данные с прибора и отправляет считанные данные третьему
который например обрабатывает данные, преобразует их в числа и отправляет всем желающим,
например таску, который записывает эти данные на диск
или же главному, который показывает их юзеру
Должен добавить, что главный прибор у меня состоит обычно из двух циклов: один обработчик событий с лицевой панели, а другой только выдаёт данные на лицевую панель.
Для примера:
один прибор отвечает за главную лицевую панель (т.е. генерирует команды по нажатию на кнопки)
другой прибор считывает данные с прибора и отправляет считанные данные третьему
который например обрабатывает данные, преобразует их в числа и отправляет всем желающим,
например таску, который записывает эти данные на диск
или же главному, который показывает их юзеру
Должен добавить, что главный прибор у меня состоит обычно из двух циклов: один обработчик событий с лицевой панели, а другой только выдаёт данные на лицевую панель.
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: Библиотека "Tasking"
Я на GOOP'е тоже написал себе набор инструментов для работы с программой, использующей многопоточность.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Библиотека "Tasking"
Почему никто не говорит что библиотека нихрена не работает? Кто нить ваще скачивал и открывал её?
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение