コードにスレッドをプッシュしているスレッドのベクトルがあります。関数「func」を約 100 回呼び出した後、「アクティブな例外なしで呼び出されて終了します」というメッセージが表示されます。このエラーは、スレッドに対して「結合」が呼び出されていないことを意味することを読みました。以下のコードでは、ベクター内のすべてのスレッドに対して「結合」を呼び出します。私のプログラムでは、既に約 100 回関数を呼び出していますが、再度呼び出すとコードがクラッシュします。スレッド、たとえばthread_10が最初の「for」ループの終了前に終了し、2番目までに関数「join」を呼び出すことができない可能性はありますか?
可能であれば、どうすればこれを防ぐことができますか?
void func(){
vector<std::thread> my_threads;
for (deque<unsigned int>::iterator it = candidates.begin(); it != candidates.end(); it++)
{
Query* quer = &queries[*it];
my_threads.push_back(std::thread(foo, param));
}
for (std::thread &thread: my_threads)
{
thread.join();
}
}