C++ QtConcurrent::在创建新线程后继续运行

C++ QtConcurrent::在创建新线程后继续运行,c++,qt,concurrency,qt5,C++,Qt,Concurrency,Qt5,对于大量数据,我必须反复运行相同的函数 在这里,我将使用QtConcurrent::run,以便可以同时处理5个对象。这是我的代码,它意味着对每个数据集进行循环: for (int j = 0; j < (dataset.size())/3; j++){ int i = 0; while (i < 2) { QtConcurrent::run(this, &SomeObject::doWork, dataset.

对于大量数据,我必须反复运行相同的函数

在这里,我将使用
QtConcurrent::run
,以便可以同时处理5个对象。这是我的代码,它意味着对每个数据集进行循环:

    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++;
        }
    }
for(int j=0;j<(dataset.size())/3;j++){
int i=0;
而(i<2){
QtConcurrent::run(this,&SomeObject::doWork,dataset.at(i+3*j));
i++;
}
}
问题:我注意到,有时数据集中的某些数据不会调用
doWork
。如前所述,我相信线程不是为丢失的数据创建的。在调用下一对数据集之前,如何确保同时处理2个数据集(并获得成功的结果)

for(int j=0;j<(dataset.size())/3;j++){
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();
}
未来同步器; int i=0; 而(i<2){ synchronizer.addFuture(QtConcurrent::run(this,&SomeObject::doWork,dataset.at(i+3*j)); i++; } synchronizer.waitForFinished(); }