C++ 在类中创建一个线程,将类中另一个成员函数作为参数传入线程,并在线程中修改累的成员属性,线程函数和类实现分两个文件
时间: 2024-10-04 07:01:29 浏览: 29
在C++中,为了实现你在描述的需求,你需要使用`std::thread`库来创建线程,并通过`std::ref`或`std::move`来传递指向成员函数的指针或者智能指针。这里是一个简单的例子,我们将分为两个文件:一个是包含类定义的`ClassFile.cpp`,另一个是包含线程函数的`ThreadFunctionFile.cpp`。
**`ClassFile.cpp` (包含类定义)**
```cpp
// Class.h
#ifndef CLASS_H
#define CLASS_H
#include <thread>
#include <mutex> // 用于保护共享数据
class MyClass {
public:
int sharedValue = 0;
void increment(int amount);
std::mutex mutex; // 互斥锁
// 创建线程的目标函数
void threadTargetFunction();
};
#endif // CLASS_H
// Class.cpp
#include "Class.h"
void MyClass::increment(int amount) {
std::lock_guard<std::mutex> lock(mutex); // 获取互斥锁
sharedValue += amount;
}
void MyClass::threadTargetFunction() {
// 将increment方法作为参数传递给线程
std::thread workerThread(increment, 5);
workerThread.join(); // 等待线程结束
}
```
**`ThreadFunctionFile.cpp` (包含线程函数实现)**
```cpp
#include "Class.h"
#include "ClassFile.h" // 包含头文件以便访问类和成员函数
int main() {
MyClass myObject;
myObject.threadTargetFunction(); // 调用线程目标函数
return 0;
}
```
在这个例子中,我们创建了一个名为`MyClass`的类,它有一个公共成员变量`sharedValue`和一个线程安全地增加它的方法`increment`。`threadTargetFunction`创建一个新的线程并调用`increment`方法,同时传递一个值给`amount`参数。注意,为了保护`sharedValue`,我们在`increment`方法内部加锁。
阅读全文