我需要从我的应用程序中调用这个外部命令“qconf”而不冻结它
queueList = ["all.q","a1.q","a2.q","a3.q"]
我发现这可以使用线程来完成。怎么样?
还有其他方式
命令是
qconf -sq all.q
答案 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();
}