このコール:
thread.join();
は、明示的thread
は、リターンを実行している機能まで待つためにあなたのプログラムに指示します。あなたの関数は決して戻ってこないので、プログラムはこの関数呼び出しを通過することはありません。スレッドの作成とそれに対応するjoin()
の呼び出しの間に余分なスレッドを開始することができます。たとえば、
#include <thread>
void someFunction() { for(volatile int x = 0; ; x = x){};}
int main()
{
std::thread t1(someFunction);
std::thread t2(someFunction);
std::thread t3(someFunction);
t1.join();
t2.join();
t3.join();
return 0;
}
は、絶対に何もしない3つのスレッドを生成します。スレッドに渡された関数が返る場合、これはあなたがしたいことです。
タスクが実行され、その前にメインプログラムが終了するようにするには、プラットフォーム依存の方法で新しいプロセスを生成する必要があります。そのため、プログラムの終了によって実行が停止されません。
'join()'はスレッドが終了するのを待っていて、スレッドを作成した後に既にブロックしているのをブロックしています。しかし、終了または終了する前にメインスレッドでjoin()を呼び出す必要があります。 – PeterT