Ich habe einen Steckplatz, der einige Argumente in einem QProcess übergeben wird. Ich führe ein externes Programm mit einigen dieser Argumente aus. Das Problem ist, dass ich eine Warteschlange für diese Prozesse haben möchte, bis der vorherige Prozess beendet ist, um den nächsten zu starten.Wie kann ich eine Warteschlange mit QProcess verwenden?
Was ist Ihrer Meinung nach der beste/einfachste Weg?
Hier ist meine Methode/Schlitz:
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 Hier ist die Lösung, wenn Sie es brauchen:
Nach der QStringList Idee, mein CallApp Methode fügt nur den Befehl an den QStringList wie:
list << command;
Und dann Aufrufe an 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();
}
Ich empfehle dringend, die QStringList-Überladung von start() mit getrennten Argumenten zu verwenden. Sonst werden Sie ziemlich bald auf Probleme stoßen (z. B. wenn das Programm, das Sie ausführen, ein Leerzeichen in seinem Pfad hat). Die QStringList() - Version führt das Anbieten automatisch aus. –
Sie verwenden das fertige Signal falsch, siehe meine Antwort unten. – ismail