Russian Qt Forum

Qt => Общие вопросы => Тема начата: Morgoth от Март 22, 2012, 07:38



Название: Странное поведение QProcess при вызове внешней программы
Отправлено: Morgoth от Март 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);
}


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


Название: Re: Странное поведение QProcess при вызове внешней программы
Отправлено: Morgoth от Март 22, 2012, 10:01
Используй:
bool QProcess::startDetached ( const QString & program, const QStringList & arguments, const QString & workingDirectory, qint64 * pid = 0 ) [static]
он ничего не ждет.


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

по поводу QProcess::startDetached() мне наоборот хотелось бы дождаться завершения программы, прежде чем запускать ее еще раз. но судя по вашему объчснению так сделать не получится.