如何生成类函数的外部线程

How to make a extern thread of a class function

本文关键字:外部 线程 类函数 何生成      更新时间:2023-10-16

有一个关于使用成员函数启动线程

这是一个给定的例子:

#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. 要在另一个线程中执行非静态成员函数,还需要传递类的实例:

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

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