1

我正在考虑从主线程创建 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 秒。t1t2

t3

t4

在我的主线程一直在做它的事情的同时。

更新:如何将其std::thread t1(&B::start, this); //Launch a thread分解,以便我std::thread t1;在标题中声明,但(&B::start, this);在需要的地方执行然后detach();

4

1 回答 1

0

你为什么要分离你的第一个线程?无论如何,它将与您的主线程分开运行!

于 2013-12-11T18:27:50.400 回答