Как я могу использовать очередь с QProcess? - PullRequest
0 голосов
/ 17 января 2011

У меня есть слот, который называется передачей некоторых аргументов, используемых в QProcess.Я выполняю внешнюю программу с некоторыми из этих аргументов.Проблема в том, что я хочу иметь очередь для этих процессов, ожидая, пока предыдущий процесс не завершится, чтобы запустить следующий.

Как вы думаете, что является лучшим / самым простым способом?

Здесьмой метод / слот:

void FirstCase::CallApp(QString text, QString pathAndFileName)
{
   QString command = QString("App1.exe %1 -Z %2").arg(pathAndFileName).arg(message); 
   QProcess* process = new QProcess(this);
   process->start(command);
}

РЕДАКТИРОВАТЬ Вот решение, если вам это нужно:

Следуя идее QStringList, мой метод CallApp просто добавляет команду кQStringList вроде:

list << command;

и затем вызывает Execute ();

void FirstCase::Execute()
{
   if(!list_.isEmpty()&&!executing_)
    {
        QProcess* p = new QProcess(this);
        QString c = list_.takeFirst();
        p->start(c);
        executing_=TRUE;
        connect(p, SIGNAL(finished(int)),this,SLOT(ExecFinished()));
    }
}

void FirstCase::ExecFinished()
{
    executing__=FALSE;
    Execute();
}

Ответы [ 2 ]

4 голосов
/ 17 января 2011

Вы можете использовать очередь QString, чтобы поставить в очередь свои команды и сохранить их.Затем начните с вершины очереди, запустите новый процесс и подключите его сигнал Done () к слоту.Когда этот процесс завершится, запустите новый процесс, если очередь не пуста и т. Д.

0 голосов
/ 17 января 2011

Правильная подпись для функции finished:

void QProcess::finished ( int exitCode, QProcess::ExitStatus exitStatus )

, поэтому вы должны подключиться вот так;

connect(p, SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(ExecFinished()));
...