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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Странное поведение QProcess при вызове внешней программы  (Прочитано 2968 раз)
Morgoth
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« : Март 22, 2012, 07:38 »

Добрый день!

Использование ниже приведенного кода приводит к вполне логичному результату. Четыре раза запускается внешняя программа kcalc (используется линукс и КДЕ). Причем каждый следующий вызов программы происходит после закрытия kalc вызванного в предыдущий раз. Так и должно быть т.к. используется QProcess::execute(). Но стоит заменить kcalc на скажем firefox или konsole, как все четыре вызова программы начинают происходить одновременно (параллельно). Т.е. открывается сразу четыре файерфокса или консоли.
Как это можно объяснить? Помогите понять логику работы QProcess.

Код:
#include <QProcess>
...
for(int i=0; i<4; i++)
{
  QStringList args;
  QProcess::execute("kcalc", args);
}
Записан
BRE
Гость
« Ответ #1 : Март 22, 2012, 08:37 »

Как это можно объяснить? Помогите понять логику работы QProcess.
QProcess::execute запускает внешний процесс и дожидается завершения его работы. Некоторые программы при старте форкаются (или запускают другой бинарник), после чего завершаются. Вот kcalc так не делает, а две последние делают.
Используй:
bool QProcess::startDetached ( const QString & program, const QStringList & arguments, const QString & workingDirectory, qint64 * pid = 0 ) [static]
он ничего не ждет.
Записан
Morgoth
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« Ответ #2 : Март 22, 2012, 10:01 »

Используй:
bool QProcess::startDetached ( const QString & program, const QStringList & arguments, const QString & workingDirectory, qint64 * pid = 0 ) [static]
он ничего не ждет.


спасибо за объяснение.

по поводу QProcess::startDetached() мне наоборот хотелось бы дождаться завершения программы, прежде чем запускать ее еще раз. но судя по вашему объчснению так сделать не получится.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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