【发布时间】:2015-07-27 07:15:40
【问题描述】:
我有一个class Foo,它必须在构造函数上启动一个线程(这是我的类上的一个方法loop())。
我的类在头文件上是这样的:
class Foo
{
public:
Foo();
~Foo();
private
void loop();
std::thread m_thread;
//more stuff.
}
而源文件是:
Foo::Foo()
{
m_thread(&Foo::loop, Foo()); // <---- No match for call '(std::thread) (void (Foo::*)(), Foo)'
m_thread.join();
}
Foo::~Foo()
{
m_thread.kill(); // <---- ??? how to do this?
}
void Foo::loop()
{
while()
{
//do stuff.
}
}
问题:
1 - 如何修复Foo constructor 上的错误?编译时出现"no match for call" 错误。
额外问题:
2 -如何杀死对象析构函数上的线程?
【问题讨论】:
-
1 - 将构造函数公开
-
...这不是问题,但我想你还是想拥有一个公共 ctr,对吧?
-
请注意,您的线程调用
loop()是在一个单独的Foo对象上,因此您将无限递归到越来越多的Foo构造函数中。您可能希望将this指针传递给线程。 -
对不起...构造函数是公开的...在这里打错了。
标签: c++ multithreading constructor stdthread