与进程一样多的线程

时间:2009-12-02 20:24:04

标签: multithreading qt

我需要从我的应用程序中调用这个外部命令“qconf”而不冻结它

queueList = ["all.q","a1.q","a2.q","a3.q"]

我发现这可以使用线程来完成。怎么样?

还有其他方式

命令是

qconf -sq all.q

1 个答案:

答案 0 :(得分:1)

尝试这样的事情。 QtConcurrent将优化线程数。

void executeInProcess(QString& text)
{
    QProcess::execute( "qconf", QStringList() << "-sq" <<  text);
}

void main()
{

    QApplication app;
    MainWindow mainWindow;
    //...
    QStringList queueList;
    QFutureWatcher watcher; 
    connect(&watcher, SIGNAL(finished()), &mainWindow, SLOT(whatEverYouWantToDo()));
    QFuture<void> result = QtConcurrent::map(queueList, executeInProcess);
    watcher.setFuture(result);
    //...
    app.exec();
}


修改

如果你想要每个进程的结果,你需要映射函数QFuture<T> mapped ( const Sequence & sequence, MapFunction function ),而executeInProcess需要从QProcess调用返回结果。

QString executeInProcess(QString& text)
{
    QString result;
    QProcess::execute( "qconf", QStringList() << "-sq" <<  text);
    // ... 
    return 
}
whatEverYouWantToDo()

可以迭代结果

QFuture<QString> result ;
QFutureIterator<QString> i(result);
while (i.hasNext()) {    
    qDebug() << i.next();
}