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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QProcess и QThreads  (Прочитано 2608 раз)
Disa
Гость
« : Июнь 03, 2013, 14:30 »

Добрый день.

Требуется запустить 3и сторонних паралелльно работающих процесса и закрывать их по надобнсти. Процессы работают бесконечно, пока не получат Ctrl+C (если запущены из терминала) или соответсвенно "kill".

Почему-то просто в слоте:
Код
C++ (Qt)
screenCaprtureParameters << ...;
captureScreenProcess.start("/.../avconv", screenCaprtureParameters);

выдает captureScreenProcess.state() = 1, captureScreenProcess.errorString() "Unknown error" и ничего не происходит.

Если делать через execute или startDeatached, все работает. Но execute вешает GUI (т.к. процесс бесконечный), а если startDeateched, нужно управлять через полученный PID.

Добавил новый поток и сделал в слоте вот так:

Код
C++ (Qt)
captureScreenThread = new QThread(this);
captureScreenProcess.moveToThread(captureScreenThread);
screenCaprtureParameters << ...;
captureScreenProcess.start(".../avconv", screenCaprtureParameters);
captureScreenThread->start();

и по прежнему происходит ровно тоже самое что и раньше.

PS: Вопрос - если делать отдельный класс унаследованный от QThread, который должен запускать этот процесс и крутить его, то при перегрузке run нужно в теле метода тоже писать start()?
Записан
mutineer
Гость
« Ответ #1 : Июнь 03, 2013, 14:33 »

Нет, в теле run() писать start() не надо, его надо вызывать как и раньше у объекта потока
Записан
Disa
Гость
« Ответ #2 : Июнь 04, 2013, 16:26 »

Да у меня руки не из того места. С потоками разобрался и где-то прочел, что start будет работать в том же потоке где и объявлялся указатель на qprocess. Меня больше смутило, что у меня start ничего не делал, потом выяснилось, что чисто для консольных утилит нужно либо ловить сигналы типа readyReadStandardOutput, либо же запускать через терминал / cmd. Я пока сделал второе, вроде работает. Костыль, конечно.

PS: Мб кто-нибудь кто-то знает, как запустить параллельно 2е и более консольные утилиты не вызывая терминала?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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