c++多线程类方法

c++ multithreading class methods

本文关键字:类方法 多线程 c++      更新时间:2023-10-16

我有以下问题:

vector<thread> vThreads;
list<Crob *> lRobs;
list<Crob *>::iterator i;
for(i = lRobs.begin(); i != lRobs.end(); i++)
{
    vThreads.push_back(thread((*i)->findPath));
}

我想传递方法findPath到一个线程,但我只是得到很多错误…

> labrob.cpp: In function ‘int main(int, char**)’:
labrob.cpp:72:43: error: no matching function for call to ‘std::thread::thread(<unresolved overloaded function type>)’
labrob.cpp:72:43: note: candidates are:
In file included from labrob.cpp:14:0:
/usr/include/c++/4.7/thread:131:7: note: std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = int (Crob::*)(); _Args = {}]
/usr/include/c++/4.7/thread:131:7: note:   no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘int (Crob::*&&)()’
/usr/include/c++/4.7/thread:126:5: note: std::thread::thread(std::thread&&)
/usr/include/c++/4.7/thread:126:5: note:   no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘std::thread&&’
/usr/include/c++/4.7/thread:122:5: note: std::thread::thread()
/usr/include/c++/4.7/thread:122:5: note:   candidate expects 0 arguments, 1 provided
make: *** [labrob.o] Error 1

我已经尝试过传递本地函数,并且没有问题…

新增CRob header

#pragma once
#include "point.hpp"
#include "lab.hpp"
class Crob
{
  protected:
   Cpoint *pos;
   int steps;
   Clab *labfind;
   string direction;
  public:
   Crob(Clab *lab);
   virtual ~Crob();
   virtual void findPath(); 
   void moveTo(int x, int y);   
   void moveToPrint(int x, int y);  
   int getSteps(void);
   void checkDirection();
};

看起来您试图将非静态方法传递给std::thread构造函数。您不能这样做:非静态方法需要一个对象才能被调用。看起来你想要:

for(i = lRobs.begin(); i != lRobs.end(); i++)
{
    vThreads.push_back(std::thread(&Crob::findPath, *i));
}