#include <iostream>
#include <thread>
#include <atomic>
#include <mutex>
using namespace std;
class Widget {
public:
Widget() :
worker_{std::thread([this](){ this->worker_func();})}, //可以在构造函数里起线程,也可以在其他成员函数里
to_quit_{false} { }
~Widget() {
to_quit_ = true;
if (worker_.joinable()) {
worker_.join();
cout << "thread is destroy" << endl;
}
}
private:
void worker_func() {
while(!to_quit_.load()) {
std::lock_guard<std::mutex> lock(mutex_);
//do something with class member
std::this_thread::sleep_for(std::chrono::seconds(1));
cout << "thread is working" << endl;
}
}
private:
std::thread worker_; //线程对象
mutable std::atomic_bool to_quit_; //线程的回收标志
mutable std::mutex mutex_; //线程函数要修改成员变量,需要加锁
};
void foo() {
Widget w;
std::this_thread::sleep_for(std::chrono::seconds(10));
}
int main() {
foo();
return 0;
}
thread与类绑定 C++11
猜你喜欢
转载自blog.csdn.net/cyfcsd/article/details/129956054
今日推荐
周排行