C++ C++;11在分离的线程中创建新线程
我正在考虑是否可能创建一个C++ C++;11在分离的线程中创建新线程,c++,multithreading,c++11,stdthread,C++,Multithreading,C++11,Stdthread,我正在考虑是否可能创建一个std::thread,detach()从主线程开始,而分离的线程创建线程,并在运行下一个线程之前等待join() 但是我不认为这是可能的,因为我总是在第一个线程之后而在下一个线程之前崩溃 代码中的某个地方: std::thread t1(&B::start, this); //Launch a thread t1.detach(); 内部B::开始: std::thread t2(&C::start, this); //Launch a thread
std::thread
,detach()
从主线程开始,而分离的线程创建线程,并在运行下一个线程之前等待join()
但是我不认为这是可能的,因为我总是在第一个线程之后而在下一个线程之前崩溃
代码中的某个地方:
std::thread t1(&B::start, this); //Launch a thread
t1.detach();
内部B::开始:
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();
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;
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;
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;
内部C::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();
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;
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;
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;
内部E::开始:
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();
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;
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;
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;
std::cout为什么要拆下第一个线程?无论如何,它将与主线程分开运行 std::threadt1.detach()之后发生了什么代码>在主线程中?如果它所在的对象被破坏,所有其他对象都可能崩溃,因为它们中的对象都是相同的。t1
是在对象的构造函数中创建的,该对象被填充到向量中,以便将来对其进行操作。你能看到我的更新吗?根据什么行动?您将其分离。我怀疑您的第四个线程创建中有一个输入错误。@Jason:您能提供一个sscce吗?…更准确地说:在std::thread t1(&B::start,this)之后代码>,线程正在运行!如果以后要加入它,则不应分离它。