std::bind 与std::thread配合使用
时间: 2023-06-21 14:16:47 浏览: 114
C++11 并发指南之std::thread 详解
`std::bind`和`std::thread`可以很方便地配合使用,可以将一个函数或函数对象和其参数绑定到一个线程上。
例如,假设有以下函数:
```cpp
void print(int a, int b) {
std::cout << a << " " << b << std::endl;
}
```
我们可以使用以下方式将其绑定到一个线程上:
```cpp
std::thread t(std::bind(print, 1, 2));
t.join();
```
这里,`std::bind(print, 1, 2)` 表示将函数`print`和参数`1`和`2`绑定为一个可调用对象,然后将其作为参数传递给`std::thread`的构造函数。最后,使用`join`函数等待线程结束。
另外,我们可以将函数对象和其成员函数绑定到一个线程上。例如,假设有以下类:
```cpp
class MyClass {
public:
void print(int a, int b) {
std::cout << a << " " << b << std::endl;
}
};
```
我们可以使用以下方式将其绑定到一个线程上:
```cpp
MyClass obj;
std::thread t(std::bind(&MyClass::print, &obj, 1, 2));
t.join();
```
这里,`&MyClass::print` 表示要绑定的成员函数,`&obj` 表示要调用的对象,`1` 和 `2` 分别表示两个参数。需要注意的是,这里需要使用 `&obj` 来获取对象的地址,否则会被认为是将对象复制到新线程中,这样会导致出错。
阅读全文