2014-10-30 3 views
-1

Мне нужно снова и снова запускать одну и ту же функцию для большого объема данных.QtConcurrent :: запуск продолжается после создания нового потока

Здесь я буду использовать QtConcurrent::run, чтобы одновременно работать с 5 объектами. Это мой код, который предназначен toloop через для каждого набора данных:

for (int j = 0; j < (dataset.size())/3; j++){ 
     int i = 0; 
     while (i < 2) { 
      QtConcurrent::run(this, &SomeObject::doWork, dataset.at(i+3*j)); 
      i++; 
     } 
    } 

Проблема: я заметил, что бывают случаи, когда doWork не вызывается для некоторых данных в наборе данных. Поскольку this QT Documentation говорит, я считаю, что нить не создается для недостающих данных. Как я могу гарантировать, что я имею дело с 2 dataSet в одно и то же время (и получение успешных результатов), прежде чем вызывать следующую пару?

ответ

2
for (int j = 0; j < (dataset.size())/3; j++){ 
    QFutureSynchronizer<void> synchronizer; 
    int i = 0; 
    while (i < 2) { 
     synchronizer.addFuture(QtConcurrent::run(this, &SomeObject::doWork, dataset.at(i+3*j))); 
     i++; 
    } 
    synchronizer.waitForFinished(); 
} 
Смежные вопросы