столько потоков, сколько процесс - PullRequest
0 голосов
/ 02 декабря 2009

Мне нужно вызвать эту внешнюю команду "qconf" из моего приложения, не останавливая ее, где

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

Я обнаружил, что это можно сделать с помощью потоков. Как?

Есть ли другой способ

команда

qconf -sq all.q

1 Ответ

1 голос
/ 03 декабря 2009

Попробуйте что-нибудь подобное. 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...