デタッチされたスレッドがスレッドを作成し、次のスレッドを実行する前に a を待機している間に、メインスレッドから astd::thread
を作成する可能性について考えています。detach()
join()
しかし、最初のスレッドの後、次のスレッドの前に常にクラッシュするため、これは可能ではありません。
コードのどこか:
std::thread t1(&B::start, this); //Launch a thread
t1.detach();
内側B::start
:
std::thread t2(&C::start, this); //Launch a thread
t2.join();
std::thread t3(&D::start, this); //Launch a thread
t3.join();
std::thread t4(&D::start, this); //Launch a thread
t4.join();
内側C::start
:
std::cout << "Thread t2 is starting" << std::endl;
auto start = std::chrono::high_resolution_clock::now();
std::this_thread::sleep_until(start + std::chrono::seconds(60));
std::cout << "Thread t2 waited for 60 seconds" << std::endl;
内側D::start
:
std::cout << "Thread t3 is starting" << std::endl;
auto start = std::chrono::high_resolution_clock::now();
std::this_thread::sleep_until(start + std::chrono::seconds(60));
std::cout << "Thread t3 waited for 60 seconds" << std::endl;
内側E::start
:
std::cout << "Thread t4 is starting" << std::endl;
auto start = std::chrono::high_resolution_clock::now();
std::this_thread::sleep_until(start + std::chrono::seconds(60));
std::cout << "Thread t4 waited for 60 seconds" << std::endl;
だからここに私が期待していることがあります:
スレッドt1
が作成され、メイン スレッドから切り離されるため、メイン アプリは で実行
され続けt1
、t2
作成されて 60 秒間スリープします。
60 秒後にt3
作成され、60 秒間スリープします。
60 秒後にt4
作成され、60 秒間スリープします。
私のメインスレッドが実行し続けている間ずっと、そのことをしています。
更新:これをどのように取得して分割し、ヘッダーでstd::thread t1(&B::start, this); //Launch a thread
宣言しますが、必要な場所で実行してから実行しますか?std::thread t1;
(&B::start, this);
detach();