簡體   English   中英

類中的C ++ 11線程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM