我正在考虑从主线程创建 a 的可能性,std::thread
而分离线程创建线程并在运行下一个线程之前detach()
等待 a 。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
因此主应用程序继续运行
,被创建并休眠 60 秒。
60 秒后,创建并休眠 60 秒。
60 秒后,创建并休眠 60 秒。t1
t2
t3
t4
在我的主线程一直在做它的事情的同时。
更新:如何将其std::thread t1(&B::start, this); //Launch a thread
分解,以便我std::thread t1;
在标题中声明,但(&B::start, this);
在需要的地方执行然后detach();