成员函数中std:Thread初始化
⽬前对c++多线程理解还不是很深⼊,主要是在看《c++并发编程》,在书中初始化⼀个线程:
void do_some_work();
std::thread my_thread(do_some_work);
这个也很好理解,在初始化的时候传⼊do_some_work函数的指针。
tuo
但是在看ceph代码看到Timer类中的std::Thread 初始化⽅式有点不理解。
杭州英语口语培训哪家好55 class timer {
........
112 void timer_thread() {
113 unique_lock l(lock);
114 while (!suspended) {
115 typename TC::time_point now = TC::now();
116
117 while (!pty()) {
118 auto p = schedule.begin();
119 // Should we wait for the future?
120 if (p->t > now)
121 break;
爱护公物演讲稿
122
123 event& e = *p;
124 a(e);
125 a(e);
same是什么意思
126
被增长127 // Since we have only one thread it is impossible to have more
128 // than one running event
129 running = &e;
130
131 l.unlock();
132 e.f();
133 l.lock();
印建坤134
135 if (running) {
136 running = nullptr;财务会计和管理会计
137 delete &e;
138 } // Otherwi the event requeued itlf
139 }
ball valve
chopsticks怎么读140
141 if (pty())
142 cond.wait(l);
143 el
144 cond.wait_until(l, schedule.begin()->t);
145 }
146 }
147
bowl的音标
148 public:
149 timer() {
150 lock_guard l(lock);
151 suspended = fal;
152 thread = std::thread(&timer::timer_thread, this);
153 }
..........
其中在timer的构造函数中std::thread的参数不仅有timer_thread的指针还传⼊了this指针。完全不理解为什么需要这个this指针啊。后来请教⼀下C++⼤神才理解,每个类的成员函数有⼀个隐藏的this指针形参,所以这⾥的this指针是timer_thread的形参。
149 timer() {
150 lock_guard l(lock);
151 suspended = fal;
152 thread = std::thread(&timer::timer_thread, this); 153 }