[解決済み] C++11でスレッドを終了させるにはどうしたらいいですか?
質問
スレッドを正しく終了させたり、"terminate"コマンドに応答させる必要はないのですが、どうしたらいいですか?純粋なC++11を使用して、スレッドを強制的に終了させることに興味があります。
どのように解決するのですか?
-
を呼び出すことができます。
std::terminate()
を任意のスレッドから実行すると、参照しているスレッドが強制的に終了します。 -
を手配することができます。
~thread()
を挟むことなく、ターゲットスレッドのオブジェクト上で実行されます。join()
またdetach()
をそのオブジェクトに追加します。 これはオプション1と同じ効果になります。 -
例外をスローするデストラクタを持つ例外を設計することができます。 そして、ターゲットスレッドが強制終了されるときに、この例外を投げるように手配する。 この場合、ターゲットスレッドがこの例外を投げるようにするのが厄介な点です。
オプション1と2は、プロセス内リソースをリークしませんが すべての スレッドになります。
オプション3はおそらくリソースをリークしますが、ターゲットスレッドが例外をスローすることに同意しなければならないという点で、部分的に協力的です。
C++11には、マルチスレッドプログラムの単一スレッドを非協力的に(つまり、すべてのスレッドを強制終了せずに)強制終了する移植可能な方法は(私の知る限り)ありません。 そのような機能を設計する動機がなかったのです。
A
std::thread
は、このメンバ関数を持つことができます。
native_handle_type native_handle();
これを利用して、OSに依存した関数を呼び出して、やりたいことができるかもしれません。 例えばAppleのOSでは、この関数が存在し
native_handle_type
は
pthread_t
. 成功すると、リソースが流出する可能性が高いです。
関連
-
[解決済み] テスト
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】Android "ビュー階層を作成した元のスレッドだけが、そのビューに触れることができる"
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] プロセスとスレッドの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】デバッグアサーションに失敗しました