class ThreadGuard {
public:
ThreadGuard(std::thread &t_): t(t_) {}
~ThreadGuard()
{
if(t.joinable())
t.join();
}
private:
std::thread &t;
};
void func()
{
std::thread my_thread(f);
ThreadGuard thread_guard(my_thread);
}
ThreadGuardオブジェクトを使用して、スレッドが正常終了するまでfuncが終了しないことを保証しようとします。しかし、thread_guardオブジェクトが作成される直前に例外が発生した場合はどうなりますか?変数定義中に例外が発生する可能性はありますか?
いいですね。例外がスローされた場合は、スレッドの構築が失敗したことを意味し、スレッドは実行されないはずです。そうですか? – songyuanyao
** - 1 ** 'if(t.joinable)'は**実際のコードではありません**。 –
申し訳ありませんが、私は間違いました。それは 'if(t.joinable())'でなければなりません。 – song