[英]C++11 threads in class
我正在使用帶有類的c ++ 11線程庫,並且工作正常。
我只需要對此代碼的解釋,以便我正確理解。
我的課
class foo {
private:
std::thread t1;
void worker();
public:
void work();
};
class.cpp
#include "class.h"
void foo::worker() {
std::cout << "worker..." << std::endl;
}
void foo::work() {
t1 = std::thread(&foo::worker, this);
t1.join();
}
現在是main.cpp
#include "class.h"
int main(int argc, char **argv) {
foo bar;
bar.work();
}
我不太了解的是線程的類函數的調用。
我使用std::thread(&foo::work, this)
並按如下方式解釋此調用:第一個參數是指向該函數的指針,但我不知道為什么我不能不使用&foo::
部分就調用它。 第二個參數是線程本身知道父進程的類本身嗎?
我找不到對此的解釋。 只有代碼,我想了解它。 謝謝!
&foo::work
是必需的,因為work
是屬於foo
類的成員函數。 (非靜態)成員函數只能在已知其所屬對象的情況下才能訪問。
this
參數是一個指向應調用該方法的對象的指針。
地址位只是表示成員函數地址的語法。 我相信這也可以表示為this->worker
。 我不知道為什么為什么不允許worker
本身--看起來很明確,但這就是C ++。
您必須同時傳遞成員函數指針和this
以便線程可以在正確的對象上調用成員函數。 在內部,線程擁有一個成員函數指針,例如pmf
(指向foo::worker
),以及一個對象指針,例如po
(指向所傳遞的this
)。 它需要能夠調用(po->*pmf)()
,從而導致在正確的對象上調用worker
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.