Попробуйте что-нибудь подобное. 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();
}