Если все окна приложения закрыты Windows снимает задачу. Код в приложении после закрытия последнего окна никогда не выполняется, т.е. работа VI в Run-Time и в IDE в этом контексте может различаться.Попробовал сделать через start asynchronous call. Требуемого поведения добиться не удалось. Если у вызывающего VI, после асинхронного вызова, вызвать для This VI метод FP.close, то завершается весь процесс, в том числе и тот VI, что был запущен асинхронно.
Программа без фронт-панели
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Программа без фронт-панели
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Программа без фронт-панели
Я бы сказал, что это особенность : FP.Close неявно завершает работу всего приложения, в том время как в практически любой другой IDE я могу закрыть форму и спокойно выполнять свой код без GUI.Blackman писал(а):Если все окна приложения закрыты Windows снимает задачу. Код в приложении после закрытия последнего окна никогда не выполняется, т.е. работа VI в Run-Time и в IDE в этом контексте может различаться.
Re: Программа без фронт-панели
Замерил времена с асинхронным вызовом, без фронт-панели. В ini-файле также пробовал добавлять
Всё те же тормоза на WinXP.
Тестовый проект (.exe) запускается фоново, крутит цикл с периодом 2 мс в течение 90 секунд (добавил ещё небольшую вычислительную нагрузку), отслеживая минимальный и максимальный период цикла (на 20 секунде сброс, на всякий случай), затем сохраняет файл 111.txt, в котором обнаруженные минимальный и максимальный период цикла в мс, и завершается (т. к. вызов асинхронный с "забыванием", то на сохранение файла отводится 5 сек перед завершением).
Результат теста:
на Core i7 920, 6 ГБ ОЗУ, Win7: "1 , 3" - это нормально
на Core2 6600, 2 ГБ ОЗУ,WinXP: "1 , 263"
На первом компе также различными действиями удавалось вызвать задержку 6 мс. При тестах также пробовал в настройках системы ставить "оптимизировать работу служб, работающих в фоновом режиме" - не влияет.
Во вложениях проект и сам экзешник (если не можете/не хотите билдить).
Код: Выделить всё
hiderootwindow=true
usetaskbar=false
Тестовый проект (.exe) запускается фоново, крутит цикл с периодом 2 мс в течение 90 секунд (добавил ещё небольшую вычислительную нагрузку), отслеживая минимальный и максимальный период цикла (на 20 секунде сброс, на всякий случай), затем сохраняет файл 111.txt, в котором обнаруженные минимальный и максимальный период цикла в мс, и завершается (т. к. вызов асинхронный с "забыванием", то на сохранение файла отводится 5 сек перед завершением).
Результат теста:
на Core i7 920, 6 ГБ ОЗУ, Win7: "1 , 3" - это нормально
на Core2 6600, 2 ГБ ОЗУ,WinXP: "1 , 263"
На первом компе также различными действиями удавалось вызвать задержку 6 мс. При тестах также пробовал в настройках системы ставить "оптимизировать работу служб, работающих в фоновом режиме" - не влияет.
Во вложениях проект и сам экзешник (если не можете/не хотите билдить).
- Вложения
-
- async.zip
- (28.33 КБ) 84 скачивания
-
- async_exe.zip
- (139.63 КБ) 75 скачиваний
Последний раз редактировалось Boris_K 01 июн 2016, 17:47, всего редактировалось 2 раза.
Race conditions - опасный и скользкий баг!
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Программа без фронт-панели
Windows 7 Ultimate SP1 64-bit. Железо Intel Core i7-2600 CPU @ 3.40 GHz, 4 физ. ядра + 4 лог. ядра, 8 ГБ оперативки.
1. 1 , 15
2. 1 , 3
3. 1 , 15
В первом и третьем случае просто открывал в разные и смотрел код. Во втором случае был открыт , но больше ничего не делал. А задержка в 2 мс в Asynchronous call goal.vi не могла повлиять? Я о том, что Wait Until Next ms Multiple ждёт, когда таймер будет кратен заданному на вход числу (2 в данном случае). Если обычный Wait поставить?..
1. 1 , 15
2. 1 , 3
3. 1 , 15
В первом и третьем случае просто открывал в разные и смотрел код. Во втором случае был открыт , но больше ничего не делал. А задержка в 2 мс в Asynchronous call goal.vi не могла повлиять? Я о том, что Wait Until Next ms Multiple ждёт, когда таймер будет кратен заданному на вход числу (2 в данном случае). Если обычный Wait поставить?..
Последний раз редактировалось dadreamer 01 июн 2016, 17:04, всего редактировалось 1 раз.
Re: Программа без фронт-панели
Она просто задаёт период цикла. То есть когда мин. период 1 мс, а макс. 3 мс - это нормальная ситуация. Или когда оба по 2 мс.А задержка в 2 мс в Asynchronous call goal.vi не могла повлиять?
Конечно, подобные ждущие функции - это асинхронный код, и с ним, например, subVI уже не сделаешь сабрутиной.
Race conditions - опасный и скользкий баг!
Re: Программа без фронт-панели
Убрал задержку ту. Потестил на WinXP. Работал, открывал, закрывал разные документы и проги. Максимальная задержка теперь 5 мс :) Только одно ядро проца теперь, естественно, нагружено на полную. Считаю это ненормальным, зачем зря так грузить проц, может мешать нормальной работе.
Race conditions - опасный и скользкий баг!
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Программа без фронт-панели
Я тоже так считаю. А если сделать задержку Wait = 1 ms, а нужный интервал определять кратностью заданному числу (на выходе Wait есть значение системного таймера, берёте его и делите на заданное число, смотрите остаток от деления)? Также можно вместо задержки брать разницу таймеров и проверять кратность, но это тоже будет грузить проц.Boris_K писал(а):Считаю это ненормальным, зачем зря так грузить проц, может мешать нормальной работе.
Re: Программа без фронт-панели
В том и дело. Как теперь заставить цикл "отдыхать", не нагружая зря проц? Кроме функций ожидания, ничего и нет, если пробовать вставить какаю-то структуру с таймаутом - тоже не выход, это по сути одно и то же
Race conditions - опасный и скользкий баг!
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Программа без фронт-панели
Boris_K, вот и плавно подошли к тому, что (очень) времякритичные задачи лучше делать на ОСРВ. Но остался ещё один тест: создайте похожее приложение с замерами времени и записью в файл в другой среде (MSVC, Delphi, VB) и посмотрите, что получится. Окончательно станет ясно, кто виноват: то ли , то ли ОС, то ли обе вместе взятые.
Re: Программа без фронт-панели
Ещё попробую зарегить сервис. А также ещё не пробовал ставить приоритет процесса повышенный, вплоть до "реального времени". Завтра попробую.
Race conditions - опасный и скользкий баг!
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Программа без фронт-панели
Boris_K, до кучи, попробуйте ещё принудительно запустить экзешник в одном-единственном потоке: http://forums.ni.com/t5/LabVIEW/How-to- ... -p/3281699
Код: Выделить всё
ESys.StdNParallel=-1
ESys.other1.Normal=1
ESys.other1.Bgrnd=1
ESys.other1.High=1
ESys.other1.VHigh=1
ESys.other1.TCritical=1
Re: Программа без фронт-панели
Недолго думая, взял сейчас то, на чём доводилось писать раньше - Blitz Plus 1.39. Хоть вещь старая (2003 года), хоть поддержка давно прекращена, но решил попробовать. Сделал аналогичную прогу без польз. интерфейса. Тестил на Athlon64 X2 5200+, 3 ГБ ОЗУ, WinXP. Кое-что прояснилось.Но остался ещё один тест: создайте похожее приложение с замерами времени и записью в файл в другой среде (MSVC, Delphi, VB) и посмотрите, что получится.
Вначале наблюдал абсолютно аналогичное поведение, то есть задержки 250 - 270 мс, вызванные сворачиванием/разворачиванием окон. После этого в коде проги, там где ограничиваю период цикла, заменил функцию WaitTimer (думаю, аналог лабвьюшного Wait until next ms multiple) на функцию delay. И картина разительно поменялась! Теперь только небольшие задержки до 10 - 20 мс. Кроме того, есть поставить приоритет процесса на "реального времени" - всё становится почти идеально - во время теста запускал разные проги, в том числе полноэкранные игры - и максимум что видел - увеличение на 3 мс, а чаще вообще без него! :) Причём c высоким приоритетом тоже очень хорошо идёт. И заметной загрузки процессора нет.
Попробую в заменить на Wait.
Последний раз редактировалось Boris_K 01 июн 2016, 22:00, всего редактировалось 2 раза.
Race conditions - опасный и скользкий баг!
Re: Программа без фронт-панели
Попробовал. ЛажаетПопробую в заменить на Wait.
Race conditions - опасный и скользкий баг!
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Программа без фронт-панели
Changing the Process Priority for LabVIEW in WindowsBoris_K писал(а):Кроме того, есть поставить приоритет процесса на "реального времени" - всё становится почти идеально - во время теста запускал разные проги, в том числе полноэкранные игры - и максимум что видел - увеличение на 3 мс, а чаще вообще без него! :) Причём c высоким приоритетом тоже очень хорошо идёт. И заметной загрузки процессора нет.
Да и много где пишут, что real time приоритет использовать не стоит (вот тут, например).Realtime - Specifies the highest possible priority. Realtime process priority threads preempt the threads of all other processes. This can cause unexpected results and system crashes and is not recommended.
Но если собираетесь менять приоритет программно, то поменяйте в CLFN путь к kernel32.dll на kernel32.dll (без указания собственно пути). Кстати, там есть коммент насчёт бага в , но я только что проверил - работает нормально, приоритет меняется.
Re: Программа без фронт-панели
Попробовал и это, как для , так и для экзешника. Не помогло.Boris_K, до кучи, попробуйте ещё принудительно запустить экзешник в одном-единственном потоке: http://forums.ni.com/t5/LabVIEW/How-to- ... -p/3281699
Race conditions - опасный и скользкий баг!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 7 Ответы
- 296 Просмотры
-
Последнее сообщение dadreamer