版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengfengdiandia/article/details/82465987
现在有一个 Object 类,它有两个方法:
- Recv 负责接收数据,并传递给 Process
- Process 负责处理数据
我们希望这个类接收完数据后启动线程去处理,不阻塞后面的其他业务逻辑。
class Object {
public:
void Recv() {
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(&Object::Process, this, a); // 修改后
方式二:设置 Process 为静态函数
void Recv() {
int a = 2;
std::thread t(&Object::Process, a); // 修改后
// Do something
t.join();
}
static void Process(int val) { // 修改后
std::cout << "Process, val=" << val << "\n";
}
参考
https://thispointer.com/c11-start-thread-by-member-function-with-arguments/