【发布时间】:2017-05-07 07:42:18
【问题描述】:
我正在尝试在其自己的线程中运行成员函数并遵循this post,但是在该示例中,线程在同一个函数中开始和结束。您如何维护对线程的引用以加入单独的成员函数(例如析构函数)?我试过这个:
class foo
{
foo();
~foo();
volatile sig_atomic_t m_run_thread = true;
std::thread &m_read_thread;
void read_thread();
}
foo::foo():m_read_thread(std::thread(&foo::read_thread, this))
{
}
foo::~foo()
{
m_run_thread = false;
m_read_thread.join();
}
void foo::read_thread()
{
while(m_run_thread)
{
//do something cool
}
}
int main()
{
foo bar;
//do other stuff
}
编译器给了我一个错误:错误:从“std::thread”类型的右值对“std::thread&”类型的非常量引用无效初始化。这是因为我试图将临时绑定到引用。解决此问题的最佳方法是什么?
【问题讨论】:
-
如果它编译了,你的
m_read_thread将在foo构造之后成为一个悬空引用。为什么你有thread&成员而不是thread? -
不要将
m_read_thread用作参考。 -
这不是问题,但
volatile sig_atomic_t是用于在主程序和信号处理程序之间进行协调的糟糕的旧 C。请改用std::atomic<bool>。
标签: c++ multithreading c++11