自分のスレッドでメンバー関数を実行しようとしていて、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
}
コンパイラはしかし私にエラーを与える:エラー:タイプの非const参照の無効な初期化「のstd ::スレッド&を」タイプ「のstd ::スレッド」は右辺値から。これは、一時的に参照にバインドしようとしているために発生します。これを修正する最も良い方法は何ですか?
のようにそれを初期化します。なぜあなたは 'スレッド 'の代わりに'スレッド& 'メンバーを持っていますか? – Praetorian
'm_read_thread'を参照しないでください。 –
これは問題ではありませんが、 'volatile sig_atomic_t'は、メインプログラムとシグナルハンドラを調整するために非常に古いものです。代わりに 'std :: atomic'を使用してください。 –