在学习使用C++ std::thread过程中直接调用函数名称,发现出现以下问题
现在有一个 A 类,它有两个方法:
func1 负责接收数据,并传递给 Process
Process 负责处理数据
我们希望这个类接收完数据后启动线程去处理,不阻塞后面的其他业务逻辑。
class A {
public:
void func1() {
int a = 2;
std::thread t(Process, a);
// Do something
t.join();
}
void Process(int val) {
std::cout << "Process, val=" << val << "\n";
}
};
编译报错 error: invalid use of non-static member function
解决方案:
方式一:
//std::thread t(Process, a); // 修改前
std::thread t(&A::Process, this, a); // 修改后
方式二:设置 Process 为静态函数
void func1() {
int a = 2;
std::thread t(&A::Process, a); // 修改后
// Do something
t.join();
}
static void Process(int val) { // 修改后
std::cout << "Process, val=" << val << "\n";
}