类中的 C++11 线程

标签 c++ multithreading c++11 pointer-to-member

我正在使用带有类的 C++11 线程库,它工作正常。
我只需要对此代码的解释,以便我正确理解它。

我的类(class).h

class foo {
  private:
    std::thread t1;
    void worker();
  public:
    void work();
};

类.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 参数是指向应调用其方法的对象的指针。

关于类中的 C++11 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18592867/

相关文章:

c++ - Ubuntu 12.04 (amd64) 上 wxWidget 示例的链接问题

java - 是否可以将非同步方法调用为同步方法?

c++ - 保留 std::initializer_list 的拷贝是否安全?这是什么道理?

c++ - 获取对 lambda 捕获值的引用

C++ 字符串解析到 Delphi

c++ - Makefile 隐式调用 g++

c++ - 在 C++ 中将指针分配给数组

linux - 在 futex 之前,线程/进程如何在 Linux 中停放和唤醒?

java - 如何将流从一个线程传递到另一个线程?也许我应该采取不同的做法?

C++ 提供了 std::sort,但它是否也提供了高效搜索的功能?