Многооконность, проблемы

Обсуждение, связанное с разработкой ПО верхнего уровня
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Многооконность, проблемы

Сообщение Jakob Brontfeyn »

Мозги боятся, а глаза и руки делают,
пусть пока коряво сделано в диаграмме, но все вроде работает
проверяйте коллеги, сделано 3 независимых окна.
Почему то не получилось сделать "свернутые окна" модальными, но это
в общем то не принципиально.

все, как у Андрея Макаревича
"Не стоит прогибаться под Mikrosoft и NI,
Пусть лучше те прогнутся под нас"
Вложения
mov_windows.zip
(138.05 КБ) 162 скачивания
Аватара пользователя
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 »

Jakob Brontfeyn писал(а):Почему то не получилось сделать "свернутые окна" модальными, но это в общем то не принципиально.
на то оно и "модальное окно"
http://ru.wikipedia.org/wiki/%D0%9C%D0% ... 0%BD%D0%BE

Позицию курсора можно узнать на много проще:
Без имени.png
Без имени.png (1.72 КБ) 5292 просмотра
может конечно у Вас з/п зависит от количества строчек кода :wink:
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1327
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Многооконность, проблемы

Сообщение AndreyDmitriev »

IvanLis писал(а):Никогда на столько не вникал во все тонкости, но в Linux мне заблокировать ничего не получилось :wink:
А через System exec и не получится. Тут дело не в диалоге - вместо него можно взять, скажем, Sleep(). В Линуксе надо библиотеку .so подключить - тогда эффект станет заметен.
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1327
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Многооконность, проблемы

Сообщение AndreyDmitriev »

Jakob Brontfeyn писал(а):Мозги боятся, а глаза и руки делают,
пусть пока коряво сделано в диаграмме, но все вроде работает
проверяйте коллеги, сделано 3 независимых окна.
Кнопке закрытия лучше таки назначить Switch when released - если пользователь случайно на неё нажмёт, у него будет шанс убрать курсор не отпуская кнопку мыши и затем отпустить, при этом окно не закроется (ну так, как в Windows оно срабатывает).
Аватара пользователя
dadreamer

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

Re: Многооконность, проблемы

Сообщение dadreamer »

AndreyDmitriev писал(а):В рамках каждой системы исполнения LabVIEW выделяет несколько потоков. Их количество зависит от многих параметров - версии LabVIEW, конфигурации компьютера, некоторых настроек.
Количество потоков для той или иной системы исполнения можно настроить вручную, для этого достаточно запустить :vi: [LabVIEW]\vi.lib\Utility\sysinfo.llb\threadconfig.vi
http://digital.ni.com/public.nsf/allkb/ ... BC006C0F19
http://digital.ni.com/public.nsf/allkb/ ... BC006BDCDB
Artem.spb

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

Re: Многооконность, проблемы

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

AndreyDmitriev писал(а):
Artem.spb писал(а): тут возможно придётся переделывать всю систему :)
так же есть поверье, что этот параметр
влияет на поточность, я его порой использую в сложны системах, но никогда не проверял его реальность.
Артём, вы всегда сломя голову бросаетесь переделывать архитектуру при любой необъяснимой проблеме, не вникая в её суть?
вы критикуете мою фразу отдельно от контекста. а контекст таков:
Artem.spb писал(а):
Jakob Brontfeyn писал(а): "Не использовать в циклах элементов, приводящих к переключению в UI поток" не понял это предложение
Нельзя ли переделать мой пример в соответствии с этой концепцией
тут возможно придётся переделывать всю систему :)
как она устроена по скриншотам понять сложно,
ну а в остальном правильные и ценные мысли излагаете.
Jakob Brontfeyn писал(а):Мозги боятся, а глаза и руки делают,
пусть пока коряво сделано в диаграмме, но все вроде работает
проверяйте коллеги, сделано 3 независимых окна.
на мой взгляд вполне красиво выглядит, вот только почему вы решили сворачивать "влево", а не вниз - на панель задач? оно и проще будет и естественней.

ну и опять же, что вам мешает пусть даже в рамках одного vi разделить "опрос приборов" и интерфейс? два параллельных цикла.
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Многооконность, проблемы

Сообщение Jakob Brontfeyn »

Artem.spb писал(а):
на мой взгляд вполне красиво выглядит, вот только почему вы решили сворачивать "влево", а не вниз - на панель задач? оно и проще будет и естественней.
А где взять координаты на панель задач?
Artem.spb

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

Re: Многооконность, проблемы

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

Jakob Brontfeyn писал(а):А где взять координаты на панель задач?
а они и не нужны :)
меняете состояние окна на "минимизированное" и всё
судя по тому, что моя система ворнинги выдаёт, у вас LV какая-то старая, так что этот пример в семёрке.
Вложения
minimize.vi
(27.7 КБ) 156 скачиваний
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Многооконность, проблемы

Сообщение Jakob Brontfeyn »

Спасибо, действительно все упрощается, просто в LV6.0 такой функции нет,
учту для старших версий.
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Многооконность, проблемы

Сообщение Jakob Brontfeyn »

Artem.spb писал(а):
AndreyDmitriev писал(а):
Artem.spb писал(а): ну и опять же, что вам мешает пусть даже в рамках одного vi разделить "опрос приборов" и интерфейс? два параллельных цикла.
Увы, это для каких то частных случаев, где данные собираются
в буфер и не анализируются в процессе, если у меня VI будет подвешен,
пусть даже опрос датчиков работает, можно аларм пропустить, ну не делать
же мне для обработки алармов еще и третий цикл а для пид-регулятора четвертый,
и кроме того висит не одно окно, а все окна.
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Многооконность, проблемы

Сообщение Jakob Brontfeyn »

AndreyDmitriev писал(а):
Jakob Brontfeyn писал(а):Мозги боятся, а глаза и руки делают,
пусть пока коряво сделано в диаграмме, но все вроде работает
проверяйте коллеги, сделано 3 независимых окна.
Кнопке закрытия лучше таки назначить Switch when released - если пользователь случайно на неё нажмёт, у него будет шанс убрать курсор не отпуская кнопку мыши и затем отпустить, при этом окно не закроется (ну так, как в Windows оно срабатывает).
спасибо, полезное замечание
Artem.spb

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

Re: Многооконность, проблемы

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

Jakob Brontfeyn писал(а):Спасибо, действительно все упрощается, просто в LV6.0 такой функции нет,
учту для старших версий.
похоже на то, однако уже тогда люди думали об этом :)
MinimizeExample.vi
(27.61 КБ) 139 скачиваний
LVWUtil32.zip
(591.76 КБ) 213 скачиваний
найдено на форуме ni, вроде как именно для шестёрки делали. но проверить открываемость не могу, только семёркой.
с другой стороны, проще ли этот вариант :)
Jakob Brontfeyn писал(а):
Artem.spb писал(а): ну и опять же, что вам мешает пусть даже в рамках одного vi разделить "опрос приборов" и интерфейс? два параллельных цикла.
Увы, это для каких то частных случаев, где данные собираются
в буфер и не анализируются в процессе, если у меня VI будет подвешен,
пусть даже опрос датчиков работает, можно аларм пропустить, ну не делать
же мне для обработки алармов еще и третий цикл а для пид-регулятора четвертый,
и кроме того висит не одно окно, а все окна.
а почему бы и не сделать :)
по диагонали пробежал тему, на которую вы ссылались ранее, может в вашем случае и не стоит заморачиваться красивой интегированностью всего во всё, и выбранная модель является лучшей - раз вы постоянно что-то модифицируете, однако та самая система, скрин которой я присылал делает именно так - собирает данные с FP (по сетке), параллельно собирает данные с двух шустрых PCI-плат, на ходу детектирует спайки - и вот тут важно ухватить всё. а дальше можно это рисовать с задержками.
поток сбора данных имеет высокий приоритет, и просматривает все данные, а дальше найденные фрагменты ставятся в очередь, из которой они вытаскиваются интерфейсом и рисуются на графиках, распределяются по таблицам и пишутся в файлы.
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Многооконность, проблемы

Сообщение Jakob Brontfeyn »

Послушайте Артем, я очень благодарен Вам за активное участие в дискусии,
но Вы хоть представляете себе, во что собираетесь меня втянуть.
Сделать простые вещи невероятно сложными.
Я и так слышу на работе почти каждый день, что никто другой кроме меня лабвью
программировать не может, как будто это моя вина, или вина лабвью. Поэтому у меня на каждой
установке работают некомпилированные VI, чтобы код был открыт, чтобы никто не мог
меня обвинить в сокрытии но-хау. Ситуации в Германии бывают очень жесткими, особенно,
если шеф понятия не имеет в твоей работе, ему главное чтобы установки надежно и круглосуточно
работали, хоть дос, хоть виндоус хоть бейсик, хоть лабвью, хоть готовые пакеты чужих фирм.
Лабвью изначально задуман был, как инструмент для
любого толкового инженера, и это очень было хорошо, а впоследнее время он все
больше превращается в громоздкую оболочку для высококвалифицированного программиста
с опытом работы в текстовых языках програмирования, серверами, сетью и т.д.
Что меня очень смущает, поэтому и не гонюсь за высокими версиями с их кодом активации
для каждого компьютера.
Только потому, что с лабвью лично я смог, без ложной скромности, решить те проблемы над которыми
годами бились, пытаясь применить готовые пакеты чужих фирм, началось его внедрение на нашей фирме и,
соответственно, я смог закрепится на работе.
Применение у нас идет только внутри, не делаются программы на заказ.
Далее, по поводу сворачивания окон, благодарю за новые примеры, сегодня их посмотрю,
трудно будет обьяснить, надо почувствовать на своей шкуре, но я попробую.
Понимаете, вот такие "псевдосвернутые окна" для меня милей, чем полностью свернутые, где ничего не видно.
Я должен бросив один только взгляд сразу отличать живого человека от мертвого или спящего,
а не подходить пытаться нащупать пульс и понять дышит он или нет, кстати вот здесь на эту тему
http://www.labviewportal.org/viewtopic. ... t=154#p340
Поэтому и все мои мониторы в помещениях лабораторий никогда не гаснут, несмотря на призыв экономить энергию.
Ни о каком "мертвом режиме" окна, а где то там внутри что то крутится, в моем случае, не может быть и речи.
Надеюсь, Вы меня правильно поняли.
Artem.spb

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

Re: Многооконность, проблемы

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

беседа успешно покинула рамки вопроса сворачивания окна :)
хотя непонятно, зачем вы так много времени потратили на решение вопроса сворачивания, если свёрнутое окно вам не нужно.
Jakob Brontfeyn писал(а):Послушайте Артем, я очень благодарен Вам за активное участие в дискусии,
но Вы хоть представляете себе, во что собираетесь меня втянуть.
я не планирую никого никуда втягивать, опять же "почему бы и да" было шуткой, а дальше говорилось о том, что каждому своё
, чтобы код был открыт, чтобы никто не мог меня обвинить в сокрытии но-хау.
а пакеты сторонних производителей тоже с открытыми кодами дают? :)
Ситуации в Германии бывают очень жесткими, особенно,
если шеф понятия не имеет в твоей работе, ему главное чтобы установки надежно и круглосуточно
работали, хоть дос, хоть виндоус хоть бейсик, хоть лабвью, хоть готовые пакеты чужих фирм.
мне кажется это нормальная ситуация, когда спец занимается своими вопросами, а другой спец - своими. общаясь с нашими (российскими) учёными я вникаю не только в суть задачи., но и в картингу науки в целом - и у нас учёный вынужден не только быть спецом в своей науке, но и искать деньги на исследования, потом самостоятельно собирать установку или находить того, кто её сделает, а потом ещё много чего.
Лабвью изначально задуман был, как инструмент для любого толкового инженера, и это очень было хорошо, а впоследнее время он все больше превращается в громоздкую оболочку для высококвалифицированного программиста с опытом работы в текстовых языках програмирования, серверами, сетью и т.д.
вот не соглашусь. мне сложно взглянуть на систему глазами обычного "лаборанта", но мне кажется все эти експрессVI и прочие навороты вводятся именно для того, чтобы тот самый инженер мог быстрее собрать нужную ему установку. ну а все прочие навороты дают возможность продвинутому программеру наворотить много чего красивого, да и опять же, все навороты упрощают "красоту", вот вам приходится вызывать какие-то внешние библиотеки, чтоб банально свернуть окно, а в следующих версиях это делается одной "функцией" - и не надо знать текстовые языки.
Что меня очень смущает, поэтому и не гонюсь за высокими версиями с их кодом активации для каждого компьютера.
в германии пиратки? :)
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1327
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Многооконность, проблемы

Сообщение AndreyDmitriev »

Artem.spb писал(а): вы критикуете мою фразу отдельно от контекста. а контекст таков:
Ну, я, может слишком резко выразил свою мысль, но всё же если взглянуть на проблему со стороны, то очень уж больших изменений тут не требуется.
Суть в том, что в большой работающей системе пользователь наткнулся на довольно-таки частный случай, когда программа перестаёт работать при зажатии и удержании кнопок управления окном.

Проблем тут на самом деле две, и их надо рассматривать отдельно.

Первая проблема заключается в том, что часть циклов намертво останавливается, и это вызывает срабатывание таймаутов. Суть в том, что при зажимании кнопок блокируется поток UI. Да, пожалуй, тут проблемы отчасти в архитектуре, коих две - в программе присутствуют времякритичные части, и циклы общения с внешним железом зависимы от потока UI. Проблема решается выносом из времякритичных циклов всех элементов, чувствительных к блокировке этого потока. Полностью переделывать архитектуру не следует, я полагаю, в системе таких циклов не очень много. Но важно понять, что замена кнопок на свои собственные эту проблему не решит - как только где-либо в программе какой-либо элемент заблокирует поток UI, то программа остановит свою работу. Да и при дальнейшем развитии программы при увеличении количества блокирующих элементов мы будем всё больше тормозить поток UI и в какой-то момент таймауты начнут срабатывать в самый непредсказуемый момент - хуже проблемы и придумать сложно. Так что я бы первым делом проанализировал, какие критичные циклы и где останавливаются при зажимании кнопок и устранил это дело. Также тут может помочь просто вызов диалога в UI потоке и наблюдение за поведением программы в данной ситуации. Ну а проблему времякритичных участков никакое изменение архитектуры не решит, ибо Windows не есть система реального времени.

Вторая проблема заключается в том, что передняя панель перестаёт обновляться при зажимании этих самых кнопок. В какой-то мере это косметическая проблема (если устранён п.1 выше), но корень этой проблемы лежит довольно глубоко - на уровне взаимодействия операционной системы и LabVIEW. Тут Яков Иосифович идёт по непростому, но, пожалуй, верному пути замены проблемных кнопок на свои собственные. Конечно, интересно решить эту проблему на уровне ОС, и она требует более глубокого исследования, но навскидку я пока другого решения не вижу. Бонусом можно получить управляемое сворачивание/разворачивание/перемещение, которое для данной конкретной системы будет более удобно (как то - сворачивание не в панель, а просто уменьшение размеров, "прилепливание" одного окна к другому и их синхронное перемещение, и т.п). Тут довольно много кропотливой работы, но не на уровне изменения архитектуры, а просто надстройка существующей системы.

Полностью же менять архитектуру смысла не вижу, тем более, что п.2 это всё равно не решит, можно обойтись минимальным вмешательством, чтобы добиться стабильной работы в п.1. Я вообще сторонник принципа "работает-не трогай" в данном случае. Надо просто пофиксить то, что не работает. Но ещё раз - проблему остановки циклов при блокировке UI я бы решал в первую очередь - это более критично, и лишь потом занимался бы новой оконной системой.
Ответить

Вернуться в «Лицевая панель»