Russian Qt Forum
Март 29, 2024, 03:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Запуск с ожиданием  (Прочитано 8398 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Август 08, 2018, 17:41 »

Добрый день

Наверное чего-то не дочитал в букваре, плиз "ткните носиком". Нужно запустить процесс и выждать (чтобы потом его найти в списке процессов). Ну вроде QProcess::start и QProcess::waitForStarted. Но тогда деструктор QProcess прибьет(?) этот процесс, а мне это совсем  не нужно. А если QProcess::startDetached - то нет waitForStarted. И приходится нырять в нативняк - не хотелось бы

Спасибо
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #1 : Август 08, 2018, 21:40 »

http://doc.qt.io/qt-5/qprocess.html#started - оно ?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Август 09, 2018, 07:41 »

Нет. Мне не нужно завершать
Цитировать
QProcess::~QProcess()

Destructs the QProcess object, i.e., killing the process.

Note that this function will not return until the process is terminated.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #3 : Август 09, 2018, 09:14 »

Нет. Мне не нужно завершать

так не завершай: new QProcess(this)

Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Август 09, 2018, 09:32 »

Нет. Мне не нужно завершать

так не завершай: new QProcess(this)



Создавай в куче и подписывайся на нужные сигналы. А когда надо будет, удаляй.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Август 09, 2018, 11:58 »

Сигналы (асинхронка) здесь ни при чем, наоборот, нужна синхронка (waitForStarted). Есть небольшое приложение которое из сокета получает команды, напр

1) Запустить главный модуль
2) Передать ему данные задания (через шаред память)
3) Опрашивать модуль до тех пор пока задание не будет выполнено
и.т.д.

Сейчас главный модуль запускается, но пункт 2 не срабатывает (ОС не успевает запустить, в списке процессов модуля еще нет)

так не завершай: new QProcess(this)
Ну так сорить классами в куче по меньшей мере неаккуратно (пусть этих запусков и относительно немного - десятки, макс сотня)
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3257


Просмотр профиля
« Ответ #6 : Август 09, 2018, 14:32 »

Ну так не сорите, сохраните в синглтоне.
Бросать QProcess на пол в вашей хадаче плохо - ну а как процесс умрет и его PID кто-то переиспользует? Ваши действия?
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #7 : Август 09, 2018, 18:06 »

Ну так сорить классами в куче по меньшей мере неаккуратно (пусть этих запусков и относительно немного - десятки, макс сотня)

сто раз вызвать new\delete - это ужас-ужас и неаккуратно ?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Август 10, 2018, 06:40 »

сто раз вызвать new\delete - это ужас-ужас и неаккуратно ?
Не могу я вызывать delete  (ни явно ни неявно) т.к. это может прибить процесс (см букварь)

Ну хорошо, зайдем с др стороны. Запустили процесс QProcess::startDetached, все Ок, но это [static] - как теперь дождаться его реального запуска (напр в течение 5 сек) чтобы след команда уже смогла передать ему данные ? Исходники QProcess::waitForStarted открывал, ну там обильные "трубы", выдрать не удастся, проще самому через нативняк.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Август 10, 2018, 09:22 »

> Не могу я вызывать delete  (ни явно ни неявно) т.к. это может прибить процесс (см букварь)
Делай коннект на finished у процесса и там удаляй. В чем проблема? Тема элементарная, тебе уже сказали как делать, а ты даже попробовать не хочешь.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Август 10, 2018, 10:40 »

> Не могу я вызывать delete  (ни явно ни неявно) т.к. это может прибить процесс (см букварь)
Делай коннект на finished у процесса и там удаляй. В чем проблема? Тема элементарная, тебе уже сказали как делать, а ты даже попробовать не хочешь.
Пример
Код
C++ (Qt)
QProcess * proc = new QProcess(name);
proc->waitForStarted(5000);
Все хорошо. Теперь данное приложение просто закрывается. Завершать созданный процесс нельзя - он нужен другим. Оставить "как есть"  (ничего не делать) вряд ли корректно. Мои действия?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Август 10, 2018, 11:17 »

Тут зависит от того, надо ли тебе его самому завершать или просто реагировать на его завершение.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #12 : Август 10, 2018, 11:45 »

Ну хорошо, зайдем с др стороны. Запустили процесс QProcess::startDetached, все Ок, но это [static] - как теперь дождаться его реального запуска (напр в течение 5 сек) чтобы след команда уже смогла передать ему данные ? Исходники QProcess::waitForStarted открывал, ну там обильные "трубы", выдрать не удастся, проще самому через нативняк.

А что является признаком того, что запущенный процесс готов к работе? То, что он запустился (сработал сигнал QProcess::started()) может ещё не означает, что он создал нужные каналы для общения, и всё равно придётся организовывать ожидание готовности к работе.
Записан

Пока сам не сделаешь...
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3257


Просмотр профиля
« Ответ #13 : Август 10, 2018, 11:56 »

Ну хорошо, зайдем с др стороны. Запустили процесс QProcess::startDetached, все Ок, но это [static] - как теперь дождаться его реального запуска (напр в течение 5 сек) чтобы след команда уже смогла передать ему данные ? Исходники QProcess::waitForStarted открывал, ну там обильные "трубы", выдрать не удастся, проще самому через нативняк.

Я уже сказал, никак не дождаться, через 5 секунд по этому пиду может быть ДРУГОЙ процесс.
Так что только через трубки держать его; сломанная трубка значит что процесс умер.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #14 : Август 10, 2018, 12:22 »

Завершать созданный процесс нельзя - он нужен другим. 

по условиям задачи не очевидно что процесс будет нужен другим, тогда  https://stackoverflow.com/questions/17501642/detaching-a-started-process
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.086 секунд. Запросов: 22.