Russian Qt Forum
Ноябрь 22, 2024, 16:42
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Многопоточное программирование, процессы
>
Запуск с ожиданием
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Запуск с ожиданием (Прочитано 9385 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Запуск с ожиданием
«
:
Август 08, 2018, 17:41 »
Добрый день
Наверное чего-то не дочитал в букваре, плиз "ткните носиком". Нужно запустить процесс и выждать (чтобы потом его найти в списке процессов). Ну вроде QProcess::start и QProcess::waitForStarted. Но тогда деструктор QProcess прибьет(?) этот процесс, а мне это совсем не нужно. А если QProcess::startDetached - то нет waitForStarted. И приходится нырять в нативняк - не хотелось бы
Спасибо
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Запуск с ожиданием
«
Ответ #1 :
Август 08, 2018, 21:40 »
http://doc.qt.io/qt-5/qprocess.html#started
- оно ?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запуск с ожиданием
«
Ответ #2 :
Август 09, 2018, 07:41 »
Цитата: qate от Август 08, 2018, 21:40
http://doc.qt.io/qt-5/qprocess.html#started
- оно ?
Нет. Мне не нужно завершать
Цитировать
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
Сообщений: 1177
Re: Запуск с ожиданием
«
Ответ #3 :
Август 09, 2018, 09:14 »
Цитата: Igors от Август 09, 2018, 07:41
Нет. Мне не нужно завершать
так не завершай: new QProcess(this)
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Запуск с ожиданием
«
Ответ #4 :
Август 09, 2018, 09:32 »
Цитата: qate от Август 09, 2018, 09:14
Цитата: Igors от Август 09, 2018, 07:41
Нет. Мне не нужно завершать
так не завершай: new QProcess(this)
Создавай в куче и подписывайся на нужные сигналы. А когда надо будет, удаляй.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запуск с ожиданием
«
Ответ #5 :
Август 09, 2018, 11:58 »
Сигналы (асинхронка) здесь ни при чем, наоборот, нужна синхронка (waitForStarted). Есть небольшое приложение которое из сокета получает команды, напр
1) Запустить главный модуль
2) Передать ему данные задания (через шаред память)
3) Опрашивать модуль до тех пор пока задание не будет выполнено
и.т.д.
Сейчас главный модуль запускается, но пункт 2 не срабатывает (ОС не успевает запустить, в списке процессов модуля еще нет)
Цитата: qate от Август 09, 2018, 09:14
так не завершай: new QProcess(this)
Ну так сорить классами в куче по меньшей мере неаккуратно (пусть этих запусков и относительно немного - десятки, макс сотня)
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Запуск с ожиданием
«
Ответ #6 :
Август 09, 2018, 14:32 »
Ну так не сорите, сохраните в синглтоне.
Бросать QProcess на пол в вашей хадаче плохо - ну а как процесс умрет и его PID кто-то переиспользует? Ваши действия?
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Запуск с ожиданием
«
Ответ #7 :
Август 09, 2018, 18:06 »
Цитата: Igors от Август 09, 2018, 11:58
Ну так сорить классами в куче по меньшей мере неаккуратно (пусть этих запусков и относительно немного - десятки, макс сотня)
сто раз вызвать new\delete - это ужас-ужас и неаккуратно ?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запуск с ожиданием
«
Ответ #8 :
Август 10, 2018, 06:40 »
Цитата: qate от Август 09, 2018, 18:06
сто раз вызвать new\delete - это ужас-ужас и неаккуратно ?
Не могу я вызывать delete (ни явно ни неявно) т.к. это может прибить процесс (см букварь)
Ну хорошо, зайдем с др стороны. Запустили процесс QProcess::startDetached, все Ок, но это [static] - как теперь дождаться его реального запуска (напр в течение 5 сек) чтобы след команда уже смогла передать ему данные ? Исходники QProcess::waitForStarted открывал, ну там обильные "трубы", выдрать не удастся, проще самому через нативняк.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Запуск с ожиданием
«
Ответ #9 :
Август 10, 2018, 09:22 »
> Не могу я вызывать delete (ни явно ни неявно) т.к. это может прибить процесс (см букварь)
Делай коннект на finished у процесса и там удаляй. В чем проблема? Тема элементарная, тебе уже сказали как делать, а ты даже попробовать не хочешь.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запуск с ожиданием
«
Ответ #10 :
Август 10, 2018, 10:40 »
Цитата: Пантер от Август 10, 2018, 09:22
> Не могу я вызывать delete (ни явно ни неявно) т.к. это может прибить процесс (см букварь)
Делай коннект на finished у процесса и там удаляй. В чем проблема? Тема элементарная, тебе уже сказали как делать, а ты даже попробовать не хочешь.
Пример
Код
C++ (Qt)
QProcess
*
proc
=
new
QProcess
(
name
)
;
proc
->
waitForStarted
(
5000
)
;
Все хорошо. Теперь данное приложение просто закрывается. Завершать созданный процесс нельзя - он нужен другим. Оставить "как есть" (ничего не делать) вряд ли корректно. Мои действия?
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Запуск с ожиданием
«
Ответ #11 :
Август 10, 2018, 11:17 »
Тут зависит от того, надо ли тебе его самому завершать или просто реагировать на его завершение.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: Запуск с ожиданием
«
Ответ #12 :
Август 10, 2018, 11:45 »
Цитата: Igors от Август 10, 2018, 06:40
Ну хорошо, зайдем с др стороны. Запустили процесс QProcess::startDetached, все Ок, но это [static] - как теперь дождаться его реального запуска (напр в течение 5 сек) чтобы след команда уже смогла передать ему данные ? Исходники QProcess::waitForStarted открывал, ну там обильные "трубы", выдрать не удастся, проще самому через нативняк.
А что является признаком того, что запущенный процесс готов к работе? То, что он запустился (сработал сигнал QProcess::started()) может ещё не означает, что он создал нужные каналы для общения, и всё равно придётся организовывать ожидание готовности к работе.
Записан
Пока сам не сделаешь...
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Запуск с ожиданием
«
Ответ #13 :
Август 10, 2018, 11:56 »
Цитата: Igors от Август 10, 2018, 06:40
Ну хорошо, зайдем с др стороны. Запустили процесс QProcess::startDetached, все Ок, но это [static] - как теперь дождаться его реального запуска (напр в течение 5 сек) чтобы след команда уже смогла передать ему данные ? Исходники QProcess::waitForStarted открывал, ну там обильные "трубы", выдрать не удастся, проще самому через нативняк.
Я уже сказал, никак не дождаться, через 5 секунд по этому пиду может быть ДРУГОЙ процесс.
Так что только через трубки держать его; сломанная трубка значит что процесс умер.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Запуск с ожиданием
«
Ответ #14 :
Август 10, 2018, 12:22 »
Цитата: Igors от Август 10, 2018, 10:40
Завершать созданный процесс нельзя - он нужен другим.
по условиям задачи не очевидно что процесс будет нужен другим, тогда
https://stackoverflow.com/questions/17501642/detaching-a-started-process
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...