Странное торможение параллельных потоков

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

Странное торможение параллельных потоков

Сообщение Boris_K »

Имеется не очень маленький, но и не сказать что большой, проект. Основной :vi: идёт в три параллельных цикла. Никакой сложной иерархии нет, просто в разных местах вызываются простенькие SubVI-субрутины. На лиц. панели сделаны индикаторы для текущей итерации (квадратик i ) каждого потока, просто чтобы проверять, не тормозит ли.

В целом всё отлично, никаких тормозов. Но заметил неприятный артефакт. Если вращать колесо мыши, то рост значений в этих индикаторах, а значит и сами циклы, резко тормозятся, вплоть до остановки, если колесо мыши вращается быстро.

Сам :vi: имеет около 250 разных контролов и индикаторов, и около 30 скрытых, 5 графиков. Всё это раскидано по 6 вкладкам на Tab control. Но лиц. панель в экран помещается, и реальной прокрутки при вращении колеса нет. Заметил, если поставить курсор в таблицу (чтобы при вращении колеса прокручивалась именно таблица), то артефакт пропадает, торможения нет.

Огорчает то, что:
1) Ни основной :vi: , ни один из вызываемых subVI не имеют никаких "сношений" с колесом мыши, то есть никак специально не обращаются к данным, которые можно получить с колеса.
2) Не знаю, с какого момента это началось, возможно, было уже давно, просто заметил недавно.

Сам :vi: выкладывать очень геморно, там ещё 13 subVI, плюс специальные ActiveX (устанавливаемые отдельно) плюс пара доп. библиотек. Чем может быть вызван артефакт (особенно при том, что в пункте 1)?
Последний раз редактировалось Boris_K 03 мар 2016, 21:40, всего редактировалось 1 раз.
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 писал(а):Сам :vi: выкладывать очень геморно, там ещё 13 subVI, плюс специальные ActiveX (устанавливаемые отдельно) плюс пара доп. библиотек. Чем может быть вызван артефакт (особенно при том, что в пункте 1)?
Значит ставим кофе, будем гадать на гуще :drink: .

Это может быть и глюк самой системы.

У Вас прокрутка на FP отключена?
Без имени.png
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странный артефакт с колесом мыши

Сообщение Boris_K »

Значит ставим кофе, будем гадать на гуще
1. особого смысла выкладывать нет, т. к. говорю же, нигде в программе нет обращений к колесу мыши, а кода наворочено плотненько так на много экранов 1080p
2. реально геморно выкладывать, и тем кто смотреть будет, надо будет устанавливать кучу всего
3. немного не по себе, когда выкладываю в сеть исходник своей интеллектуальной собственности, поймите правильно, думаю не я один такой
У Вас прокрутка на FP отключена?
полосы прокрутки есть, проверю завтра на работе, как будет если отключить, спасибо за совет.
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 писал(а):немного не по себе, когда выкладываю в сеть исходник своей интеллектуальной собственности, поймите правильно, думаю не я один такой
Я Вас понимаю.

Можно попробовать оставить только элементы лицевой панели, а всю аналитику на BD удалить, возможно эффект "подвисания" останется. Тогда можно предполагать с большей степенью достоверности.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Странный артефакт с колесом мыши

Сообщение Artem.spb »

Boris_K писал(а): В целом всё отлично, никаких тормозов. Но заметил неприятный артефакт. Если вращать колесо мыши, то рост значений в этих индикаторах, а значит и сами циклы, резко тормозятся, вплоть до остановки, если колесо мыши вращается быстро.
Они реально тормозят, или только индикация подвисает?
Посчитайте период цикла, нарисуйте на графике. мб проблема только в перерисовке экрана из-за большого числа пересекающихся элементов.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Странный артефакт с колесом мыши

Сообщение Vitekkz88 »

Boris_K, попробуйте добавить Defer Panel Update для контролов/индикаторов.
http://labviewportal.org/viewtopic.php? ... lit#p62675
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Странный артефакт с колесом мыши

Сообщение Blackman »

Eсть зависимость от текущей страницы Tab контрола?
Есть Event Structure c динамической регистрацией событий?
Где находится курсор мышки при прокрутке?
Вместо кода достаточно для начала пары картинок.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странный артефакт с колесом мыши

Сообщение Boris_K »

Прояснилось. Это грабли :labview: 2012. Возможно, в новых версиях пофиксили.
Они реально тормозят, или только индикация подвисает?
Посчитайте период цикла, нарисуйте на графике. мб проблема только в перерисовке экрана из-за большого числа пересекающихся элементов.
Реально тормозят цикл (см. пример).
Eсть зависимость от текущей страницы Tab контрола?
Есть Event Structure c динамической регистрацией событий?
Нет, нет.
Где находится курсор мышки при прокрутке?
В любом месте, кроме листбоксов, которые можно крутить (если в них, то тормоза пропадают, но не полностью, на несколько мс тормозит, видимо из-за перерисовки списка).

Вот простенький пример (считает все возможные варианты сопротивления при параллельном подсоединении до 8 резисторов). Тот же самый артефакт. Запустите Parallel.vi. Следите, как бежит индикатор i, если быстро покрутить колесо мыши. Если же его крутить, когда мышь на листбоксе или списке курсоров от графика - артефакт пропадает. maxms - отслеживает максимальное значение периода цикла (reset_maxms - сбросить его).

Если в настройках :vi: убрать полосы прокрутки, то артефакт пропадает. Но как тогда прокручивать на маленьких экранах? Только программно узнавать разрешение и подстраиваться, либо делать отдельную уменьшенную версию интерфейса?
Вложения
Parallel_resist.zip
(29.85 КБ) 173 скачивания
Race conditions - опасный и скользкий баг!
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Странный артефакт с колесом мыши

Сообщение Artem.spb »

судя по всему дело именно в перерисовывании экрана системой.
как вариант решения, если есть критичные к таймингу процессы: распараллелить их. В одном цикле расчёты, во втором отображение и работа с интерфейсом.

И да, избавляться от полос прокрутки, они некрасиво смотрятся. Есть промежуточный вариант решения между "всё руками и красиво" и всё автоматом, но ужасно.
Сплиттерами разделить окно на зоны, сделав участки без растяжения и с растяжением. График разместить во второй, тогда он будет автоматом за экраном растягиваться, а остальное фиксированного размера. Примерно так:
Parallel2.vi
(28.2 КБ) 179 скачиваний
ну и в конце концов, нефиг мышкой баловаться :)
Аватара пользователя
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 писал(а):Прояснилось. Это грабли :labview: 2012. Возможно, в новых версиях пофиксили.
На счет пофиксили....
LV2014-32bit (Linux) - баг наблюдается. Причем если колесико мышки вращать интенсивно, то зависание не прерывается на всем интервале времени.
Boris_K писал(а):Если в настройках :vi: убрать полосы прокрутки, то артефакт пропадает. Но как тогда прокручивать на маленьких экранах? Только программно узнавать разрешение и подстраиваться, либо делать отдельную уменьшенную версию интерфейса?
Я просто уже наступал на эти "грабли", по этому сразу и спросил.
Делаю окно программы на минимально возможное разрешение, сейчас меньше 800*600 на уже не найдешь мониторов, но за стандарт можно брать 1024*768. Я правда не любитель заморочек с интерфейсом, мой девиз минимализм + функциональность :D .
Я это связываю с перерисовкой всего окна. Если крутить над отдельным контролом (который поддерживает прокрутку), то перерисовывается только он, по этому и подвисание не столь явно.

Ну а подвисание можно связать только на баг взаимодействия LabVIEW с OS.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Странный артефакт с колесом мыши

Сообщение Boris_K »

как вариант решения, если есть критичные к таймингу процессы: распараллелить их. В одном цикле расчёты, во втором отображение и работа с интерфейсом.
Не думаю что это поможет. :labview: ведь при выполнении сам создаёт свой отдельный поток, в котором обрабатывается интерфейс. А в каком потоке на блок-диаграмме я размещу терминалы контролов и индикаторов - никак на это не влияет. При этом, на примере того проекта (где у меня 3 потока) - тормозятся они все! Это больше всего расстраивает. Крутанул юзер колёсико - и тормознул критичный по времени процесс. :cantbe:

Глянул на сайте NI багфиксы для 2015 - судя по всему, ещё не исправлен. Может багрепорт написать? Только куда писать - не нашёл. Просто в support?
Race conditions - опасный и скользкий баг!
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Странный артефакт с колесом мыши

Сообщение Vitekkz88 »

LV2014-32bit (Linux) - баг наблюдается...подвисание можно связать только на баг взаимодействия LabVIEW с OS.
LabVIEW 2014 x64 Win7 Max Core i7, 1GB Video, 8GB RAM, FHD - подвисаний и тормозов нет. Всё нормально работает и не тормозит. Устал колёсико накручивать.
Boris_K, скачайте пробную версию LV 2014 для Win и попробуйте.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Странный артефакт с колесом мыши

Сообщение Artem.spb »

Vitekkz88 писал(а):
LV2014-32bit (Linux) - баг наблюдается...подвисание можно связать только на баг взаимодействия LabVIEW с OS.
LabVIEW 2014 x64 Win7 Max Core i7, 1GB Video, 8GB RAM, FHD - подвисаний и тормозов нет. Всё нормально работает и не тормозит..
LabVIEW 2015 32 притормаживает.
не то что бы тормозит, но без прокрутки 15-50, с прокруткой до 250 подпрыгивает
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Странный артефакт с колесом мыши

Сообщение Artem.spb »

Boris_K писал(а):
как вариант решения, если есть критичные к таймингу процессы: распараллелить их. В одном цикле расчёты, во втором отображение и работа с интерфейсом.
Не думаю что это поможет. :labview: ведь при выполнении сам создаёт свой отдельный поток, в котором обрабатывается интерфейс.
подозреваю, что мы по-разному понимаем распараллеливание.
time.png
очень даже помогло.
Чарт - время исполнения расчётного цикла, время отрисовки скачет, но расчёт занимает меньше миллисекунды.
решение (третий вариант):
Parallel_resist.zip
LV12 32bit
(95.88 КБ) 177 скачиваний
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Странный артефакт с колесом мыши

Сообщение Blackman »

В вложенном VI не менее странное поведение Event Structure.
1. Генерация User Event симулирует Mouse Scroll Event, которое как бы еще не было доступно в 2012.
2. User Event зарегистрировано Event Structure.
3. Обработчика User Event в явном виде нет.
Вложения
What is Hell.vi
(17.05 КБ) 173 скачивания
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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