スレッド用に作成したループ用関数を自前で終了させてからjoinをすると、thread::m_joinableがfalseになりjoinでassertが出ることがあります。
問題の処理を簡単なモデルで説明しますと、
bool g_finish(false);
void thread_loop(void)
{
while(true)
{
...
if(g_finish) break;
}
}
int main(void)
{
boost::thread th(thread_loop);
sleep(100000);
g_finish=true;
th.join(); // assert
return 0;
}
といった感じになります。実際にはスレッド管理クラスにおいて複数のス
レッドが管理されています。
冗長ですが、このような処理をするときにjoinのときにm_joinableがfalse
になりassertが出るという事態です。
どなたが知識をお持ちの方がおられましたらご教授願えれば幸いです。
No.1ベストアンサー
- 回答日時:
そこで assertがでるということは
・ boost::threadが実行するべき関数(或いは関数オブジェクト)を
受け取っていない(つまりスレッドが実行されていない)
・ 既に join()が呼ばれており、これが2度目の場合
・ メモリが破壊され、m_joinableが上書きされて falseが入ってしまった
のどれかだと思われます。
確認が遅れ大変失礼いたしました。自己解決いたしました。おそらくPROMETHEUSさんの提示してくださった2つ目が原因のようでした。joinを意図せぬところで呼んでいるコードを残したまま別の終了処理でjoinしていたことが原因のようです。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++スレッドの正しい終了のさ...
-
マイクロソフトedge で5チャン...
-
別スレッドのデータを受信できない
-
マルチスレッドについて
-
WaitForSingleObjectの使い方に...
-
VC++ メインループでのイベン...
-
同一スレッドで、ロックをかけ...
-
C# スレッドから親ウィンドウへ...
-
待機関数(WaitForMultipleObjec...
-
.NetのBackgroundWorkerクラス...
-
スレッドの安全な終了のさせ方
-
Linuxでスレッド優先度って変え...
-
スレッドの監視方法
-
VB2005 シリアル通信のClose処理
-
sleep関数とは?
-
DirectX 11のConsntanBuffer
-
pthread_attr_tへの値の代入に...
-
別スレッドからのフォームのテ...
-
Macターミナルで実行中のプログ...
-
VBAの配列サイズとメモリに関して
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WaitForSingleObjectの使い方に...
-
スレッドにて同一メモリの書き...
-
VC++スレッドの正しい終了のさ...
-
スレッドの監視方法について
-
Windows上で、シグナル(SIGTERM...
-
スレッドの終了の仕方
-
スレッドの安全な終了のさせ方
-
CWnd::OnTimerのスレッドの取得
-
MFC通信プログラムマルチスレッ...
-
Linuxでスレッド優先度って変え...
-
.netアプリへのSendMessageでフ...
-
VB2005 シリアル通信のClose処理
-
別スレッドからメインダイアロ...
-
マルチスレッドについて
-
スレッドの終了はどうやるんで...
-
マルチスレッドプログラミング...
-
別スレッドのデータを受信できない
-
特定のスレッドの破棄
-
msec単位のWait Timerが作れない!
-
C# スレッド終了の監視について
おすすめ情報