C++ 在类中创建一个线程,将类中另一个成员函数作为参数传入线程,线程和类成员函数实现分两个文件,并在线程中修改累的成员属性,
时间: 2024-10-05 08:00:28 浏览: 32
C++多线程封装成类使用示例
在C++中,你可以使用`std::thread`库来创建一个新的线程并执行某个成员函数。首先,你需要在一个头文件(如`ThreadClass.h`)里定义你的类及其成员函数:
```cpp
// ThreadClass.h
#ifndef THREADCLASS_H
#define THREADCLASS_H
#include <iostream>
#include <thread>
class MyClass {
public:
int sharedValue;
// 定义要传递给线程的成员函数
void threadFunction(int initialValue);
};
#endif
```
然后,在对应的源文件`ThreadClass.cpp`中实现这个函数:
```cpp
// ThreadClass.cpp
#include "ThreadClass.h"
void MyClass::threadFunction(int initialValue) {
sharedValue = initialValue; // 初始化共享值
std::cout << "Starting thread with value: " << initialValue << std::endl;
// 线程主体部分
for (int i = 0; i < 10; ++i) {
sharedValue += i;
std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟耗时操作
}
std::cout << "Thread finished, sharedValue is now: " << sharedValue << std::endl;
}
```
接下来,在另一个文件(例如`main.cpp`)中创建并启动线程:
```cpp
// main.cpp
#include <iostream>
#include <thread>
#include "ThreadClass.h"
int main() {
MyClass myObject;
int initialValue = 50;
std::thread workerThread(myObject.threadFunction, initialValue); // 将成员函数和初始值作为参数传递给线程
// 主线程继续执行其他任务
std::cout << "Main thread started, waiting for the thread to finish.\n";
// 等待线程结束
workerThread.join();
std::cout << "Main thread ended, final sharedValue: " << myObject.sharedValue << std::endl;
return 0;
}
```
在这个例子中,主线程创建了一个新线程,该线程会修改`MyClass`的`sharedValue`属性。注意,为了访问类的私有成员,你需要在`threadFunction`中添加合适的朋友函数或使用`friend`关键字。
阅读全文