将成员函数传递给std :: thread

时间:2012-06-15 20:32:42

标签: c++ multithreading c++11

  

可能重复:
  Start thread with member function

我最近一直在使用c ++ 11中的新std :: thread库,我遇到了一个问题。当我尝试将一个类函数传递给一个新线程时,它给了我一个错误(我现在没有确切的错误文本,因为我离家很远) 我有一个像这样的课程

class A
{
    void FunctA();
    void FunctB();

    void run()
    {
        std::thread t(FunctA);
        std::thread r(FunctB);
    }
}

我做错了什么?

3 个答案:

答案 0 :(得分:29)

class A
{
    void FunctA();
    void FunctB();

    void run()
    {
        std::thread t(&A::FunctA, this);
        std::thread r(&A::FunctB, this);
    }
};

指向成员函数的指针与指向函数的指针不同,调用它们的语法也不同,并且需要类的实例。您只需将指针作为std::thread构造函数的第二个参数传递给实例。

答案 1 :(得分:2)

class A
{
  public:
    A( FunctA &fa ) : fa(fa) {}

    struct FunctA
    {
      virtual void operator()() = 0;
    }
    struct FunctB
    {
      void operator()()
      {
        // thread B
      }
    }
    FunctA &fa;
    FunctB fb;

    void run()
    {
        std::thread t(fa);
        std::thread r(fb);
    }
}

boost documentation

答案 2 :(得分:0)

我认为,问题是你不能以类似于函数的方式获得指向成员函数的指针。 Here您可以找到有关此内容的更多信息。

另外,如果你提供了compipler错误文本,那么回答会容易得多。