QtConcurrent与成员函数

时间:2012-04-03 15:13:25

标签: c++ multithreading qt parallel-processing qtconcurrent

我创建了一个QFuture,我想用它来并行调用成员函数。更确切地说,我有一个使用.h:

的类solveParallel
class solverParallel {
public:
  solverParallelData(Manager* mgr_);
  virtual ~solverParallel(void);

  void runCompute(solveModel * model_);

  bool resultComput();

private:
  Manager *myMgr;
  QFuture<bool> myFutureCompute;
}; 

其中,methode runCompute()正在创建myFutureCompute成员。 .cpp看起来像

solveParallel::solveParallel(Manager* mgr_)
:m_mgr(mgr_)
{
}

solverParallel::~solverParallel(void){}

void solverParallel::runCompute(solveModel* model)
{
  futureComput = QtConcurrent::run(&this->myMgr,&Manager::compute(model));
}

bool solverParallelData::resultComput()
{
  return m_futureComput.result();
}

包含是可以的。编译失败,在线

futureComput = QtConcurrent::run(&this->myMgr,&Manager::compute(model));

出现此错误:

Error   44  error C2784: 'QFuture<T> QtConcurrent::run(T (__cdecl *)(Param1),const     Arg1 &)' : could not deduce template argument for 'T (__cdecl *)    (Param1)' from 'Manager **'   solverparallel.cpp 31

此外,在同一行代码中的'&amp; Manager'的鼠标信息中::错误:非静态成员引用必须与特定对象相关。

你看到诀窍在哪里?谢谢和问候。

1 个答案:

答案 0 :(得分:14)

来自official documentation

  

QtConcurrent :: run()也接受指向成员函数的指针。该   第一个参数必须是const引用或指向的引用   班级的实例。传递const引用非常有用   调用const成员函数;通过指针传递是有用的   调用修改实例的非const成员函数。

您正在指向指针。另请注意,您不能以您的方式传递参数,而是在run函数中作为额外参数传递。以下应该有效:

futureComput = QtConcurrent::run(this->myMgr,&Manager::compute, model);