std::thread传递类成员函数
时间: 2024-11-16 12:13:31 浏览: 20
C++11并发编程:多线程std::thread
5星 · 资源好评率100%
在C++中,`std::thread`可以用来异步地执行一个函数,包括类的成员函数。当你想要在线程中操作一个对象的成员函数时,通常的做法是通过对象的指针或引用传递。下面是一个例子:
```cpp
class MyClass {
public:
void myFunction(int param) {
// 成员函数体...
}
};
// 创建一个MyClass对象
MyClass obj;
// 创建并启动线程,传入对象及其成员函数
std::thread threadObj(&MyClass::myFunction, &obj, 5); // 参数第二个是成员函数指针,第三个是实参
// 等待线程完成(如果需要)
threadObj.join();
```
在这个例子中,`&MyClass::myFunction`是一个指向`MyClass`类中`myFunction`成员函数的指针,`&obj`是`MyClass`对象的地址。线程内部会根据传递的指针找到正确的函数并调用,同时提供额外的实参`5`。
注意,如果成员函数需要访问非静态数据成员,那么它必须保持线程局部作用域,也就是说,对象必须是线程安全的,或者使用锁或其他同步机制来保护共享资源。
阅读全文