C++ 在类中创建一个线程,将类中另一个成员函数作为参数传入线程,并在线程中修改累的成员属性
时间: 2024-10-05 13:00:29 浏览: 32
在C++中,你可以使用`std::thread`库来创建一个新的线程,同时通过构造函数或函数指针传递一个类的成员函数。首先,你需要确保这个成员函数是可拷贝的(通常它不需要返回值,因为线程不会直接返回结果)。这里是一个简单的例子:
```cpp
#include <iostream>
#include <thread>
class MyClass {
public:
int value = 0;
void increment(int times) {
for (int i = 0; i < times; ++i) {
value++;
}
}
// 可拷贝的函数类型
void (*incrementWrapper)(int) = &increment;
private:
// 不推荐公开,仅作演示
MyClass() = default;
};
int main() {
// 创建一个MyClass实例
MyClass obj;
// 创建新线程并传入incrementWrapper函数
std::thread workerThread(obj.incrementWrapper, 5); // 传入5次迭代
// 线程开始执行
workerThread.start();
// 主线程继续运行其他任务...
std::cout << "主线程: 初始值是 " << obj.value << "\n";
// 等待线程结束
workerThread.join();
// 打印最终值
std::cout << "主线程: 最终值是 " << obj.value << "\n";
return 0;
}
```
在这个例子中,`incrementWrapper`就是一个指向`increment`成员函数的指针,当线程执行`workerThread.join();`时,实际上是调用了`obj.increment(5)`,更新了`value`。
阅读全文