当前位置: 首页 > 知识库问答 >
问题:

C++11在分离线程中创建新线程

弓智明
2023-03-14

我正在考虑从主线程创建std::threaddetach()的可能性,而分离的线程创建线程并等待join()之后再运行下一个线程。

但我不认为这是可能的,因为我总是在第一个线程之后而在下一个线程之前崩溃。

std::thread t1(&B::start, this); //Launch a thread
t1.detach();
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;

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;

因此,以下是我希望发生的事情:

更新:如何接受这个std::thread t1(&b::start,this);//启动一个线程并将其分解,以便在标头中声明std::thread t1;,但在需要的地方执行(&b::start,this);,然后执行detach();

共有1个答案

何修能
2023-03-14

为什么要分离第一个线程?它将与主线程分开运行!

 类似资料:
  • 有关问题: 关于C 11: C 11: std::线程池? C 11中的异步(启动::a同步)会使线程池过时,以避免昂贵的线程创建吗? 关于升压: C提升线程重用线程 提升::线程并创建一个线程池! 我如何获得发送任务的线程池,而不必一次又一次地创建和删除它们?这意味着持久性线程可以在不加入的情况下重新同步。 我有如下代码: 与每次迭代都创建和加入线程不同,我更愿意在每次迭代中将任务发送给我的工作

  • 在C 03中,我使用了带有自建线程池的pthon,它总是保持几个线程运行(因为很慢),这样我就可以为小任务启动线程,而无需考虑性能问题。 现在,在C11中,我们有d::线程。我想标准没有说明具体的实现,所以我的问题是关于标准库实现的。他们通常选择构建s很便宜的池方法(例如,在posx上不调用),还是只是一个包装器? 换句话说,在C11中仍然推荐线程池,或者我应该在需要时创建一个,并将性能留给标准库

  • 本文向大家介绍C#程序创建线程池,包括了C#程序创建线程池的使用技巧和注意事项,需要的朋友参考一下 对于线程池,创建两个以上的函数并排队执行方法。 首先,创建类似的方法- 以相同的方式,创建更多方法,然后使用 ThreadPool.QueueUserWorkItem将方法排队以执行- 示例 您可以尝试运行以下C#代码来创建线程池。 输出结果

  • 最近,我一直在尝试寻找一个用于线程并发任务的库。理想情况下,一个简单的接口,调用线程上的函数。任何时候都有n个线程,有些线程完成得比其他线程快,并且在不同的时间到达。 首先我在试Rx,这在c语言中很好。我也研究了区块和TBB,但它们都依赖于平台。对于我的原型,我需要保持平台独立性,因为我们还不知道它将在什么平台上运行,并且在做出决定时可以更改。 C 11有很多关于线程和并发的东西,我发现了很多关于

  • 问题内容: 我是线程新手。我想创建一些与主线程分开工作的简单函数。但这似乎不起作用。我只想创建一个新线程,并在那里独立于主线程发生的事情做一些事情。这段代码看起来很怪异,但到目前为止,我对线程的了解还很少。你能解释一下这是怎么回事吗? 问题答案: 您正在线程方法中调用该方法。但是只有在线程已经启动时才调用该方法。改为这样做: