先给出代码然后分析:
#include <iostream>
#include <thread>
using namespace std;
class B
{
public:
int age = 18;
void Say()
{
std::cout << "Say B" << std::endl;
}
};
class A
{
public:
void Say()
{
std::cout << "Say A" << std::endl;
}
void Start()
{
B b;
std::thread t(&A::_start,this,b);
t.detach();
}
private:
void _start(B b)
{
Say();
b.Say();
}
};
int main()
{
A a;
a.Start();
}
首先我定义一个类B,主要是想做为线程参数传递到线程函数里面。然后我定义一个类A,我想把_start做为一个线程函数。并且传递一个B的类对象b。大家仔细看看启动线程我在std::thread传递了3个参数,第一个就是函数,这里是类的成员函数_start,第二个类对象本身,第三个就是要传递给线程的参数。我在线程里面直接调用了A类的Say函数。结果都可以运行。总结如下:
(1)类的函数要作为线程函数可以不用是static函数
(2)使用std::thread把类的成员函数作为线程函数,可以直接使用本类的成员函数
(3)启动线程时候要传递三个对应参数,如果你线程函数是2个参数,则对应要传递4个参数给std::thread