c++中用std::thread实例化一个类,并且运行改类的run函数,其中类的run()函数是一个while循环
时间: 2025-01-12 08:04:03 浏览: 40
在C++中,可以使用`std::thread`来实例化一个类并运行其成员函数。要实现这一点,你需要确保类的成员函数是可调用的(callable),并且在多线程环境中安全地访问共享资源。
以下是一个示例代码,展示了如何实例化一个类并运行其`run`函数,其中`run`函数是一个包含无限循环的成员函数:
```cpp
#include <iostream>
#include <thread>
#include <atomic>
class MyClass {
public:
MyClass() : stop_flag(false) {}
void run() {
while (!stop_flag) {
// 在这里执行你的任务
std::cout << "Running..." << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
std::cout << "Stopped." << std::endl;
}
void stop() {
stop_flag = true;
}
private:
std::atomic<bool> stop_flag;
};
int main() {
MyClass my_object;
std::thread my_thread(&MyClass::run, &my_object);
// 让线程运行一段时间
std::this_thread::sleep_for(std::chrono::seconds(5));
// 停止线程
my_object.stop();
my_thread.join();
std::cout << "Thread has finished execution." << std::endl;
return 0;
}
```
在这个示例中:
1. `MyClass`类包含一个`run`成员函数,该函数在一个无限循环中执行任务。
2. 使用`std::atomic<bool>`类型的`stop_flag`来安全地停止线程。
3. 在`main`函数中,创建一个`MyClass`对象和一个`std::thread`线程,该线程运行`MyClass`的`run`函数。
4. 主线程等待5秒钟后,调用`stop`函数来设置`stop_flag`,从而停止`run`函数中的循环。
5. 最后,调用`join`方法等待线程结束。
阅读全文
相关推荐


















