问题标签 [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.

0 投票
3 回答
4566 浏览

c++ - C++11 std::threads 并等待线程完成

我有一个定时器对象的向量。每个 Timer Object 都会启动一个模拟生长期的 std::thread。我正在使用命令模式。

发生的事情是每个 Timer 一个接一个地被执行,但我真正想要的是一个被执行......然后一旦完成,下一个......一旦完成下一个......同时不干扰主程序的执行

执行上述类似:

在 Timers::execute 中,我尝试了几种不同的方法来执行第一个而不是执行下一个,直到我以某种方式发出信号完成。

更新:

我现在这样做是为了执行一切:

第一次完成(我看到“已完成”cout),但在_t->execute();内部崩溃并for loop带有 EXEC_BAD_ACCESS。我添加了一个 cout 来检查向量的大小,它是 2,所以两个计时器都在里面。我确实在控制台中看到了这一点:

如果我将 更改detach()join()一切都完成而没有崩溃,但它会阻止我的应用程序的执行,直到这些计时器完成。

0 投票
2 回答
747 浏览

c++ - 多个 std::threads 和主程序执行问题

几天来,我一直在努力想出一种机制来启动几个计时器,而不是让它为主程序的执行计时。.join().detach(),wait_until()等的组合

我拥有的是一个向量,std::thread我想:

  • 执行第一个位置
  • 等待它完成
  • 执行下一个位置
  • 等待它完成

与此同时,我的应用程序的其余部分正在运行,用户点击事物等。我想出的一切似乎都是:

  • 在计时器运行时阻止主程序运行

或者

  • 与主线程分离,但随后计时器同时运行,在前一个完成后我想要一个。

我什至发布了:C++11 std::threads 并等待线程完成,但我似乎无法理解任何解决方案。

我应该使用std::launch::async吗?

编辑:我不确定为什么这对我来说很难掌握。我的意思是电子游戏一直都在这样做。以小塔为例。您为楼层存货,从您开始存货到该项目存货时,这些操作中的每一个都有延迟,它会触发一个弹出的 HUD 并显示“楼层已存货”。同时整个游戏保持运行,让你做其他事情。我一定很密集,因为我无法弄清楚这一点。

0 投票
1 回答
2477 浏览

c++ - 将 std::thread 对象存储为类成员

我试图将一个std::thread对象保留在一个类中。

给出的错误:

此错误消息对我没有帮助,我没有尝试访问std::thread该类的任何私有成员。

我的代码有什么问题?我如何解决它?

0 投票
4 回答
29041 浏览

c++ - 在多个线程中使用 std::cout

我编写了一个简单的程序来测试 c++11 中的线程,但std::cout没有像我预期的那样工作。

一些结果:

我使用互斥锁来锁定线程,所以我不明白为什么两个线程同时执行std::cout。它对我来说很奇怪。任何人都可以解释发生了什么!?!

0 投票
1 回答
15118 浏览

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++

0 投票
4 回答
23807 浏览

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?

0 投票
1 回答
656 浏览

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

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

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

代码中的某个地方:

里面B::start

里面C::start

里面D::start

里面E::start

所以这就是我期望发生的事情:

一个线程,将被创建并与主线程分离,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();

0 投票
2 回答
3496 浏览

c++ - std::thread::detach 在原始调用者被销毁后导致崩溃

当一个实例Test被初始化时,它会产生并分离一个std::thread在后台运行的实例。当同一个实例被销毁时,前面提到的线程会尝试访问active与实例一起被销毁的成员,从而导致崩溃(以及AddressSanitizer回溯)。

有没有办法停止分离的线程~Test()

设计很糟糕。在调用者被销毁之前在后台运行的线程应该如何正确生成/处理?

0 投票
2 回答
334 浏览

c++11 - 检测线头

我想在 c++11 中检测线程结束,但我不知道该怎么做,它看起来像那个“get”块程序,这是我所做的:

我的程序在“run”方法中没有进入“else”,程序在未加载状态时卡在“this->thread->get()”上。

我该如何处理?

谢谢!

0 投票
1 回答
194 浏览

c++ - 在新线程中构造对象?

我正在尝试构建对象,这需要一段时间才能在单独的线程中构建。(稍后在渲染循环运行时实时加载游戏资源:))

当对象仍在构建时,对该对象的请求不会失败,而是做一些替换。(就像在游戏中绘制没有纹理,而纹理仍在加载时)。我的方法是使用状态模式 - 一种状态表示可用的状态,用于仍在加载。(我的第一个是 Proxy,但你真的不想看到那个代码!)

这是完整的源代码:

问题是(如代码中所述):

  1. 我如何Construct()在 -interface 中移动方法IState以改进设计(Construct()如果对象已经可用,则丢弃调用!)
  2. 我可以列出一个Object代替的列表Object*吗?
  3. 那内存泄漏可能是什么?(我无法用 ?! 将块追踪回我自己的代码_CrtSetBreakAlloc?!)

期待您对设计的回答和评论。(我刚开始处理软件架构,所以如果这种方法是垃圾,请纠正我;))