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();
}