如何在QProcess中使用队列?

时间:2011-01-17 12:29:09

标签: c++ qt 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);
}

编辑如果您需要,请在此解决方案:

遵循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 个答案:

答案 0 :(得分:4)

您可以使用QString队列来排队命令并存储它们。然后,从队列顶部开始,启动一个新进程并将其finished()信号连接到一个插槽。当该进程完成时,如果队列不为空,则启动新进程,等等。

答案 1 :(得分:0)

finished函数的正确签名是;

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

所以你应该像这样连接;

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