问题标签 [stdthread]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++11 std::threads 并等待线程完成
我有一个定时器对象的向量。每个 Timer Object 都会启动一个模拟生长期的 std::thread。我正在使用命令模式。
发生的事情是每个 Timer 一个接一个地被执行,但我真正想要的是一个被执行......然后一旦完成,下一个......一旦完成下一个......同时不干扰主程序的执行
执行上述类似:
在 Timers::execute 中,我尝试了几种不同的方法来执行第一个而不是执行下一个,直到我以某种方式发出信号完成。
更新:
我现在这样做是为了执行一切:
第一次完成(我看到“已完成”cout),但在_t->execute();
内部崩溃并for loop
带有 EXEC_BAD_ACCESS。我添加了一个 cout 来检查向量的大小,它是 2,所以两个计时器都在里面。我确实在控制台中看到了这一点:
如果我将 更改detach()
为join()
一切都完成而没有崩溃,但它会阻止我的应用程序的执行,直到这些计时器完成。
c++ - 多个 std::threads 和主程序执行问题
几天来,我一直在努力想出一种机制来启动几个计时器,而不是让它为主程序的执行计时。.join()
和.detach()
,wait_until()
等的组合
我拥有的是一个向量,std::thread
我想:
- 执行第一个位置
- 等待它完成
- 执行下一个位置
- 等待它完成
与此同时,我的应用程序的其余部分正在运行,用户点击事物等。我想出的一切似乎都是:
- 在计时器运行时阻止主程序运行
或者
- 与主线程分离,但随后计时器同时运行,在前一个完成后我想要一个。
我什至发布了:C++11 std::threads 并等待线程完成,但我似乎无法理解任何解决方案。
我应该使用std::launch::async
吗?
编辑:我不确定为什么这对我来说很难掌握。我的意思是电子游戏一直都在这样做。以小塔为例。您为楼层存货,从您开始存货到该项目存货时,这些操作中的每一个都有延迟,它会触发一个弹出的 HUD 并显示“楼层已存货”。同时整个游戏保持运行,让你做其他事情。我一定很密集,因为我无法弄清楚这一点。
c++ - 将 std::thread 对象存储为类成员
我试图将一个std::thread
对象保留在一个类中。
给出的错误:
此错误消息对我没有帮助,我没有尝试访问std::thread
该类的任何私有成员。
我的代码有什么问题?我如何解决它?
c++ - 在多个线程中使用 std::cout
我编写了一个简单的程序来测试 c++11 中的线程,但std::cout
没有像我预期的那样工作。
一些结果:
我使用互斥锁来锁定线程,所以我不明白为什么两个线程同时执行std::cout
。它对我来说很奇怪。任何人都可以解释发生了什么!?!
multithreading - 在 Mac OS X 上使用 clang 创建 std::thread 时出错:“尝试使用已删除的函数”
考虑我的测试代码:
这是它产生的错误:
如果我创建一个这样的线程:_th = std::thread(&Foo::threadFunc, std::ref(*this));
我得到:
我究竟做错了什么?我在 VS2012 的 Windows 上没有这样的问题。我在 Mac 上的默认 stdlib 实现也没有这个问题,但现在我必须使用 libc++。
我的编译器标志:
-std=c++11 -mmacosx-version-min=10.7 -stdlib=libc++
c++ - Is it possible to define an std::thread and initialize it later?
My aim is to keep an std::thread
object as data member, and initialize it when needed.
I'm not able to do this (as in my code below) because the copy constructor of the std::thread
class is deleted. Is there any other way to do it?
c++ - C++11 在分离线程中创建新线程
我正在考虑从主线程创建 a 的可能性,std::thread
而分离线程创建线程并在运行下一个线程之前detach()
等待 a 。join()
但我不认为这是可能的,因为我总是在第一个线程之后但在下一个线程之前崩溃。
代码中的某个地方:
里面B::start
:
里面C::start
:
里面D::start
:
里面E::start
:
所以这就是我期望发生的事情:
一个线程,将被创建并与主线程分离,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();
c++ - std::thread::detach 在原始调用者被销毁后导致崩溃
当一个实例Test
被初始化时,它会产生并分离一个std::thread
在后台运行的实例。当同一个实例被销毁时,前面提到的线程会尝试访问active
与实例一起被销毁的成员,从而导致崩溃(以及AddressSanitizer回溯)。
有没有办法停止分离的线程~Test()
?
设计很糟糕。在调用者被销毁之前在后台运行的线程应该如何正确生成/处理?
c++11 - 检测线头
我想在 c++11 中检测线程结束,但我不知道该怎么做,它看起来像那个“get”块程序,这是我所做的:
我的程序在“run”方法中没有进入“else”,程序在未加载状态时卡在“this->thread->get()”上。
我该如何处理?
谢谢!
c++ - 在新线程中构造对象?
我正在尝试构建对象,这需要一段时间才能在单独的线程中构建。(稍后在渲染循环运行时实时加载游戏资源:))
当对象仍在构建时,对该对象的请求不会失败,而是做一些替换。(就像在游戏中绘制没有纹理,而纹理仍在加载时)。我的方法是使用状态模式 - 一种状态表示可用的状态,用于仍在加载。(我的第一个是 Proxy,但你真的不想看到那个代码!)
这是完整的源代码:
问题是(如代码中所述):
- 我如何
Construct()
在 -interface 中移动方法IState
以改进设计(Construct()
如果对象已经可用,则丢弃调用!) - 我可以列出一个
Object
代替的列表Object*
吗? - 那内存泄漏可能是什么?(我无法用 ?! 将块追踪回我自己的代码
_CrtSetBreakAlloc
?!)
期待您对设计的回答和评论。(我刚开始处理软件架构,所以如果这种方法是垃圾,请纠正我;))