问题标签 [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 投票
1 回答
1894 浏览

c++ - 使用 c++11 std::thread 获取段错误

...

编译:clang++ -std=c++11 -stdlib=libc++ newFile.cpp

我在 MultiplyElement 中遇到了段错误……知道为什么吗?

0 投票
1 回答
3277 浏览

c++ - C++ std::thread 无效使用 void 表达式

我的线程程序有问题。我知道问题是什么,只是不知道如何解决。我正在设置任意数量的线程来创建 mandelbrot 集,然后将其写入 ppm 文件。我正在使用 std::thread 的向量并调用 Mandelbrot 类成员函数来执行线程。问题发生在这里。我正在调用编译器不喜欢的 void(void) 函数。我该如何解决这个问题,以便线程执行 void(void) 函数?我的代码如下:

主文件

曼德尔布罗特.cpp

0 投票
2 回答
5774 浏览

c++ - std::thread 导致应用程序中止并出现错误 R6010

我有一个名为 Task 的类,它在内部拥有一个成员 std::thread。总体思路是创建一个在处理请求到来时保持活动状态的线程。

在函数 start() 我做:

问题是该行调用 abort() 时出现运行时错误 R6010。我在某处读到这可能是由于 m_thread 的析构函数在没有先前加入的情况下被调用,但是由于线程尚未启动,我无法加入它。

我正在使用 Visual Studio 2012 运行它

更新:

所以我尝试了一个测试示例并且无法复制错误。然后我在有问题的函数中替换了我的 start 函数,如下所示:

但我仍然收到错误 R6010。调用栈是:

UPDATE2: 终于可以复制问题。代码如下。在主函数中调用 foo()。

我想这里的某个地方存在竞争条件,因为它有时会崩溃,而另一些则不会。一个线程在 ~Task() 中的关键区域内,另一个作为 Update1 中的堆栈。

0 投票
3 回答
5056 浏览

c++ - 创建 shared_ptr 的实例与 make_shared

考虑以下代码:

我正在尝试初始化共享指针mThread以便它调用函数Step。但是,编译器给了我错误“类型的引用无效初始化......来自类型'未解析的重载函数类型'的表达式”。显然我在做一些愚蠢的事情,但我不能指望它。有人可以帮忙吗?提前致谢!

0 投票
0 回答
76 浏览

c++ - 无论如何“拦截”一个std :: thread?

无论如何在 std::thread 运行时中断它,用它调用一个新方法,让它返回到原来的位置,并且仍然可以有效地与它创建的 opengl 上下文、windows 等一起使用?

0 投票
2 回答
80 浏览

c++ - 使用线程后,在没有 cout 的情况下,在 C++ 中并行实现函数到列表的 Lisp 样式映射失败

此代码仅在/* debug messages */未注释下的任何行时才有效。或者,如果映射到的列表少于 30 个元素。

func_map是 Lisp 样式映射的线性实现,可以假设它可以工作。

它的使用如下func_map(FUNC_PTR foo, std::vector* list, locs* start_and_end)

FUNC_PTR是一个指向函数的指针,该函数返回void并接收一个int指针

例如:&foo其中foo定义为:

locs是一个有两个成员的结构int_startint_end; 我用它来告诉func_map它应该迭代哪些元素。

我认为问题可能在于如何vector_locs[i]使用以及如何解决线程。但是使用向量来维护locs线程引用的实例的状态应该可以防止它成为问题;我真的很难过。

0 投票
6 回答
106693 浏览

c++ - 我什么时候应该使用 std::thread::detach?

有时我必须使用它std::thread来加速我的应用程序。我也知道join()等到一个线程完成。detach()这很容易理解,但是调用和不调用有什么区别呢?

我认为没有detach(),线程的方法将独立使用线程工作。

不分离:

使用分离调用:

0 投票
1 回答
430 浏览

c++ - thead joinable-join 可以有竞争条件吗?你怎么绕过它?

可以说我有以下课程

基本上,如果我的线程在 joinable 和 join 调用之间完成,那么my_thread.join会永远等待吗?你如何解决这个问题?

0 投票
0 回答
73 浏览

c++ - 加入非子线程

通常你在它的父线程上调用 join() 来等待它完成。

是否允许线程在不是子线程的另一个线程上调用 join()?如果是,是否应该使用它?

0 投票
1 回答
817 浏览

multithreading - 如何使用带有 std::thread 的初始化列表作为 C++11 中的成员

我正在尝试创建一个以类作为模板的向量,该模板具有std::thread成员。但是,我不确定如何使用线程正确创建初始化列表。我目前拥有的是这样的:

但是,当我尝试在 VS2012 中编译它时,出现以下错误:

f:\program files (x86)\microsoft visual studio 11.0\vc\include\functional(1152): error C2064: term 不计算为采用 0 个参数的函数,该函数指向以下行:_VARIADIC_EXPAND_0X(_CLASS_BIND, , , , )

如果我从线程(&init_thread)初始化中删除 & 我会得到这些错误: 1>f:\users...\project\source.cpp(43): error C2248: 'std::thread::thread' :无法访问在类 'std::thread' 1> f:\program files (x86)\microsoft visual studio 11.0\vc\include\thread(73) 中声明的私有成员:参见 'std::thread::thread' 的声明1> f:\program files (x86)\microsoft visual studio 11.0\vc\include\thread(32) : 参见“std::thread”的声明

所以,我的问题是:我将如何正确创建这样一个初始化列表?

稍后在代码中我也执行以下操作(仅供参考......)