スレッド(以下:親)からスレッド(以下:子)を作成した時、子が終了した時すでに親が終了している場合、ライブラリ内部で abort() を呼ばれてしまうため、対処方法を模索しております。
C++
1#include <stdio.h> 2#include <thread> 3 4void ThreadA(void* data){ 5 printf("%c", ((char*)data)[0]); 6 return; // これは大丈夫 7} 8 9void ThreadChild(void* data){ 10 printf("%c", ((char*)data)[0]); 11 return; // この後にエラー 12} 13 14void ThreadB(void* data){ 15 std::thread tC(ThreadChild, data); // スレッド内部でスレッドを作成する 16 //tC.join(); 17 return; 18} 19 20int main(){ 21 22 char a, b; 23 a = 'A'; 24 b = 'B'; 25 26 std::thread tA(ThreadA, &a); 27 std::thread tB(ThreadB, &b); 28 29 tA.join(); 30 tB.join(); 31 32 getchar(); 33 return 0; 34}
うまくいけば、AB と表示された後入力待ちになりますが、上記のままですと、『return; // この後にエラー』の行の後で異常終了してしまいます。
子の終了を先に待つように 『//tC.join();』のコメントアウトを解除すると問題がないのですが、実践的な処理としては、親の状態にかかわりなく子を無事に完了させたいと考えております。
親子関係かかわりなく個別にスレッドを終了する方法はありますでしょうか?
よろしくお願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/15 01:07