问题标签 [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::thread 获取段错误
...
编译:clang++ -std=c++11 -stdlib=libc++ newFile.cpp
我在 MultiplyElement 中遇到了段错误……知道为什么吗?
c++ - C++ std::thread 无效使用 void 表达式
我的线程程序有问题。我知道问题是什么,只是不知道如何解决。我正在设置任意数量的线程来创建 mandelbrot 集,然后将其写入 ppm 文件。我正在使用 std::thread 的向量并调用 Mandelbrot 类成员函数来执行线程。问题发生在这里。我正在调用编译器不喜欢的 void(void) 函数。我该如何解决这个问题,以便线程执行 void(void) 函数?我的代码如下:
主文件
曼德尔布罗特.cpp
c++ - std::thread 导致应用程序中止并出现错误 R6010
我有一个名为 Task 的类,它在内部拥有一个成员 std::thread。总体思路是创建一个在处理请求到来时保持活动状态的线程。
在函数 start() 我做:
问题是该行调用 abort() 时出现运行时错误 R6010。我在某处读到这可能是由于 m_thread 的析构函数在没有先前加入的情况下被调用,但是由于线程尚未启动,我无法加入它。
我正在使用 Visual Studio 2012 运行它
更新:
所以我尝试了一个测试示例并且无法复制错误。然后我在有问题的函数中替换了我的 start 函数,如下所示:
但我仍然收到错误 R6010。调用栈是:
UPDATE2: 终于可以复制问题。代码如下。在主函数中调用 foo()。
我想这里的某个地方存在竞争条件,因为它有时会崩溃,而另一些则不会。一个线程在 ~Task() 中的关键区域内,另一个作为 Update1 中的堆栈。
c++ - 创建 shared_ptr 的实例与 make_shared
考虑以下代码:
我正在尝试初始化共享指针mThread以便它调用函数Step。但是,编译器给了我错误“类型的引用无效初始化......来自类型'未解析的重载函数类型'的表达式”。显然我在做一些愚蠢的事情,但我不能指望它。有人可以帮忙吗?提前致谢!
c++ - 无论如何“拦截”一个std :: thread?
无论如何在 std::thread 运行时中断它,用它调用一个新方法,让它返回到原来的位置,并且仍然可以有效地与它创建的 opengl 上下文、windows 等一起使用?
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_start
体int_end
; 我用它来告诉func_map
它应该迭代哪些元素。
我认为问题可能在于如何vector_locs[i]
使用以及如何解决线程。但是使用向量来维护locs
线程引用的实例的状态应该可以防止它成为问题;我真的很难过。
c++ - 我什么时候应该使用 std::thread::detach?
有时我必须使用它std::thread
来加速我的应用程序。我也知道join()
等到一个线程完成。detach()
这很容易理解,但是调用和不调用有什么区别呢?
我认为没有detach()
,线程的方法将独立使用线程工作。
不分离:
使用分离调用:
c++ - thead joinable-join 可以有竞争条件吗?你怎么绕过它?
可以说我有以下课程
基本上,如果我的线程在 joinable 和 join 调用之间完成,那么my_thread.join
会永远等待吗?你如何解决这个问题?
c++ - 加入非子线程
通常你在它的父线程上调用 join() 来等待它完成。
是否允许线程在不是子线程的另一个线程上调用 join()?如果是,是否应该使用它?
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”的声明
所以,我的问题是:我将如何正确创建这样一个初始化列表?
稍后在代码中我也执行以下操作(仅供参考......)