Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: deaks от Июль 30, 2012, 15:48



Название: Создание дочернего процесса
Отправлено: deaks от Июль 30, 2012, 15:48
Добрый день!

Необходимо, чтобы родительский процесс запускал дочерний(QProcess), который пишет в stdout и при этом должен транслироваться это в консоль родительского.

Сейчас сделал примерно так:
Создал класс ExternalExecuter
Код:
class ExternalExecuter : public QObject
{
    Q_OBJECT
public:
    ExternalExecuter(const QString& command);
    ~ExternalExecuter();

    QProcess* process();
private slots:
    void writeOutputData();
private:
    QProcess ::) *_process;
};

определил у него сигнал\слот для связки с выводом от дочернего(_process)
Код:
ExternalExecuter::ExternalExecuter(const QString& command) :
    _process(new DetachedProcess) {
    QObject::connect(_process, SIGNAL(readyReadStandardOutput()),
                     this, SLOT(writeOutputData()));
    _process->setReadChannel(QProcess::StandardOutput);
    _process->start(command);

где writeOutputData - слот:
Код:
void ExternalExecuter::writeOutputData() {
   QByteArray array;
   array = _process->readAllStandardOutput();

   std::cout << array.data();
}

Где надо создать дочерний процесс создаю объект ExternalExecuter и передаю в него необходимые параметры.
После создания вызываю в цикле
Код:
process()->waitForFinished()

тем самым данные из дочернего транслируются.

Но загвоздка в том, что необходимо завершить родительский процесс, а дочерний должен все так же продолжать писать. Какие возможны варианты решения? Пока нашел только WinAPI CreateProcess