Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;11在分离的线程中创建新线程_C++_Multithreading_C++11_Stdthread - Fatal编程技术网

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::thread
t1.detach()之后发生了什么在主线程中?如果它所在的对象被破坏,所有其他对象都可能崩溃,因为它们中的对象都是相同的。
t1
是在对象的构造函数中创建的,该对象被填充到向量中,以便将来对其进行操作。你能看到我的更新吗?根据什么行动?您将其分离。我怀疑您的第四个线程创建中有一个输入错误。@Jason:您能提供一个sscce吗?…更准确地说:在
std::thread t1(&B::start,this)之后,线程正在运行!如果以后要
加入它,则不应
分离它。