我正在使用带有类的 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/