我試圖在其自己的線程中運行成員函數,並且遵循this post,但是在該示例中,該線程在相同函數中啓動並結束。你如何保持對線程的引用來加入單獨的成員函數(比如析構函數)?從類型「的std ::線程」的右值的類型「的std ::線程&」的非const引用無效初始化:我已經試過這樣:在單獨的線程中運行成員函數
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
}
編譯器雖然給我一個錯誤:錯誤。這是因爲我試圖將臨時綁定到引用。什麼是解決這個問題的最好方法?
如果它沒有編譯,你的'm_read_thread'將成爲懸空參考'foo'建成後。爲什麼你有'線程'而不是'線程'成員? – Praetorian
不要將'm_read_thread'作爲參考。 –
這不是問題,但'volatile sig_atomic_t'是重要的C語言,用於在主程序和信號處理程序之間進行協調。改爲使用'std :: atomic'。 –