std::thread 绑定 类成员函数
时间: 2023-06-21 14:16:47 浏览: 209
类成员函数创建线程源码
3星 · 编辑精心推荐
可以使用 `std::thread` 的成员函数 `std::thread::thread` 来绑定类成员函数。需要注意的是,类成员函数有一个隐藏参数 `this`,因此需要使用 `std::bind` 或者 lambda 表达式来将 `this` 绑定到类成员函数中。
例如,假设有以下类:
```cpp
class MyClass {
public:
void myFunc(int arg1, double arg2) {
// do something
}
};
```
我们可以使用以下方式来创建一个线程并绑定 `myFunc`:
```cpp
MyClass obj;
std::thread t(&MyClass::myFunc, &obj, 42, 3.14);
t.join();
```
这里,`&MyClass::myFunc` 表示要绑定的类成员函数,`&obj` 表示要调用的对象,`42` 和 `3.14` 分别表示两个参数。注意,这里需要使用 `&obj` 来获取对象的地址,否则会被认为是将对象复制到新线程中,这样会导致出错。
另外,还可以使用 lambda 表达式来绑定类成员函数:
```cpp
MyClass obj;
std::thread t([&obj]() {
obj.myFunc(42, 3.14);
});
t.join();
```
这里,`[&obj]` 表示要捕获 `obj`,然后在 lambda 表达式中调用 `obj` 的成员函数 `myFunc`。
阅读全文