我有一个线程,在这个线程中处理一个list数据。这些操作也想放在不同的线程中处理,然后就选用了
QtConcurrent::map
class mydata;
class computeData{
void s(mydata){
....
}
void compute() {
QList<mydata*> values;;
QFuture<void> f = QtConcurrent::map(values, &computeData::s);
f.waitForFinished();
}
};
尝试构建它会显示以下错误:
C2064: term does not evaluate to a function taking 1 arguments
错误是指qtconcurrentmapkernel.h中的以下行:
bool runIteration(Iterator it, int, void *)
{
map(*it);
return false;
}
一直没理解哪里错误了。
经过不懈的努力(搜索)
大佬的解释 https://www.thinbug.com/q/44257029
其实很简单他的建议也很简单。但是我需要用类里面的成员变量,所以给的提示不合适我。
然后呢lambda表达式就出来了。修改为下面的就ok了:
class mydata;
class computeData{
void s(mydata){
....
}
void compute() {
auto k = [this](mydata data){
s(data)
};
QList<mydata*> values;
QFuture<void> f = QtConcurrent::map(values, k);
f.waitForFinished();
}
};
好了,打完收工,c++牛p, qt的这个设计属实....头疼