2011-01-17 3 views
0

У меня есть слот, который называется передачей некоторых аргументов, используемых в QProcess. Я выполняю внешнюю программу с некоторыми из этих аргументов. Проблема в том, что я хочу иметь очередь для этих процессов, ожидая завершения предыдущего процесса для запуска следующего.Как использовать очередь с 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); 
} 

EDIT Здесь решение, если вам это нужно:

Следуя идее 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(); 
} 
+0

Я настоятельно рекомендую использовать QStringList перегрузку start() с разделенными аргументами. В противном случае вы столкнетесь с кавычками довольно скоро (например, если программа, которую вы выполняете, имеет пробел в своем пути). Версия QStringList() выполняет автоматическое цитирование. –

+0

Вы неправильно используете готовый сигнал, см. Мой ответ ниже. – ismail

ответ

4

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

0

Подходит для: finished Функция есть;

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

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

connect(p, SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(ExecFinished())); 
Смежные вопросы