0からの、超初心者C++相談室at TECH0からの、超初心者C++相談室 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト765:デフォルトの名無しさん 24/01/21 21:48:26.38 zlvjOB5M.net >>758ですが、お返事ありがとうございます。 はい、とりあえず thread::detach() を使うようにしました。1つの疑問は、 https://ja.cppreference.com/w/cpp/thread/future/~future によると > ただし、その共有状態が std::async によって作成され、まだ準備完了になっておらず、これがその共有状態への最後の参照である場合は、ブロックする可能性があります。 ええ何それ、というのが発端でした(後出し失礼)。 確かに、メインスレッドの終了時のこともありますし、スレッドの後始末をちゃんと した方が本当はいいように思われます。処理が長時間たっても終了しない場合 タイムアウトさせたりとかも。 何かシステマティックな方法等あるでしょうか。参考になるものがあれば... 766:はちみつ餃子 24/01/22 12:54:36.50 T1sqP3ZB.net >>760 メインスレッドの終了直前でまずは適当にフラグを立てた上で他のスレッドの終了まで待機する。 重い処理をしているスレッドの側で完了ではないにしても区切り良く終われるポイントでフラグを読んで フラグが立っていれば後始末ルートに入ってスレッドを終了させる。 その結果としてメインスレッドの待機状態が終わってプロセスの終了。 というのが普通の大まかな流れだと思う。 その上で待機時間があまり長すぎるようだと強引にでも終わらせるとかの処理を入れるかも。 std::async は既存の関数を非同期化するちょっとしたユーティリティという立場なんじゃないかな。 それで事足りるときは便利で簡単だけど、細かい制御を勝手にやってくれるわけでもないし、 やろうとするとちょっとイマイチって感じ。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch