如何创建类函数的外部线程

时间:2016-05-12 08:00:20

标签: c++ multithreading class

有一个话题 Start thread with member function

这是一个给出的例子:

#include <thread>
#include <iostream>

class bar {
public:
    void foo() {
        std::cout << "hello from member function" << std::endl;
    }
};

int main()
{
   std::thread t(&bar::foo, bar());
   t.join();
}

但现在问题是我需要在不同的函数中使用线程变量,所以我需要将代码分成两部分std::thread t(&bar::foo, bar());t.join();

我使用以下内容:

class A {
public:
    std::thread t;
    void foo();
    void use0();
    void use1();
}

A::foo()
{
}

A::use0()
{
    std::thread t(&A::foo);
}

A::use1()
{
    t.join();
}

我收到错误std::invoke : No match was found for the overloaded function

我该怎么办?非常感谢!

1 个答案:

答案 0 :(得分:1)

  1. 要在另一个线程中执行非静态成员函数,您还需要传递类的实例:

    std::thread t(&A::foo, this);
    
  2. 您在std::thread中创建了一个本地use0(并且在销毁之前您没有调用std::thread::join)。改为分配给成员t

    t = std::thread(&A::foo, this);
    
  3. 在成员函数定义中,类定义和返回类型(void s)之后缺少分号。