问题标签 [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++ - 无法理解 std::thread 用法
我正在阅读有关 c++11 多线程的文档,并在std::thread
.
代码:
我不明白threads[i] = std::thread(thread_task, i + 1);
。是std::thread
静态函数调用,并返回 std::thread 对象的引用吗?听起来不可思议,但似乎是代码所说的。
因为我会这样写:
谢谢。
c++ - 满足条件时告诉 std::thread 杀死/停止自身
假设我有一个工作线程,它在构造tWorker
时初始化并告诉它执行,直到为真。An , , 锁定一些数据 ( ) 以便在他处理它时拥有它。Boss
work()
bRetired
std::mutex
mtx
vFiles
tWorker
我如何让tWorker
“自杀”bRetired
变成一次true
?mutex
当线程停止执行时将如何销毁?
我读过std::thread
对象不能以任何方式被打断。让线程什么都不做(或调用std::this_thread::yield()
)是否提供与杀死线程相同的效果?
笔记
- 工作线程一旦退役就无法再次启动。
- 工作线程在后台工作,不会中断主线程的执行。
c++ - 无法将类成员函数传递给另一个函数(std::thread::thread)
看看这两个代码。
下面的代码工作正常。
此代码引发错误:
错误:
c++ - 在 C++11 中设置 std::thread 优先级的便携式方法
后 C++11 世界中设置 std::thread 实例优先级的正确方法是什么
是否有一种至少在 Windows 和 POSIX (Linux) 环境中有效的可移植方式?
还是获取句柄并使用可用于特定操作系统的任何本机调用的问题?
c++ - 如果我在 Linux 上有 Pthread 代码,在 std::thread 中实现相同的代码是否有优势?
我正在做一个小型大学项目,我将不同的多线程方法应用于模式匹配算法(pthread,omp)并将它们与它们各自的顺序实现进行比较。
目前它运行良好,并且根据算法和 gcc 优化,我的运行时间缩短了大约 2 - 3 倍。
现在,我也想使用 std::thread 来完成它,但是,根据我设法收集的信息,它们是在 Linux 上使用 Pthreads 实现的,所以我想知道这是否有任何意义。
windows - mingw std::thread 与 Windows API
到目前为止,我开始使用 C++11 std::thread
(mingw 4.8) 非常好。我遇到了一种 I/O 重叠的情况,sleepEx
用于将线程置于警报等待状态。这工作得很好,直到QueueUserAPC
不得不使用它,它返回一个“无效的句柄错误”。
经过一番搜索,发现std::thread
使用了 Windows 下的 pthread 库。
有什么方法可以使用期望线程句柄的 Windows API 调用std::thread
?或者我是否需要坚持使用 Windows 线程来进行重叠 I/O?
c++ - 如何在 C++ 中将 std::thread::id 转换为字符串?
如何std::thread::id
在 C++ 中将类型转换为字符串?我正在尝试将生成的输出类型转换 std::this_thread::get_id()
为字符串或字符数组。
c++ - 如何使用 std::thread C++ 生成多个调用相同函数的线程
基本上我想做的是编写一个生成多个线程的 for 循环。线程必须多次调用某个函数。所以换句话说,我需要每个线程在不同的对象上调用相同的函数。如何使用 std::thread c++ 库做到这一点?
multithreading - C++ 11 std::thread 奇怪的行为
我正在对 std::thread 和 C++11 进行一些试验,但遇到了奇怪的行为。请看下面的代码:
这里的主要思想是我想指定一些进行独立计算的线程(在这种情况下,是简单的增量)。在所有线程完成后,应合并结果以获得整体结果。
澄清一下:这仅用于测试目的,以便让我了解 C++11 线程是如何工作的。
但是,在使用命令编译此代码时
在 Ubuntu 机器上,当我执行生成的二进制文件时,我得到了非常奇怪的行为。例如:
(应该产生输出:4000)
(应该产生输出:400000)
有人知道这里发生了什么吗?
先感谢您!
c++ - std::thread 并在 opengl 应用程序中使用 std::cin 输入
我在 OpenGL 应用程序中使用线程为用户提供外壳。
我的问题是我无法在主循环结束时取消线程,因为 std::thread 没有提供取消方法,并且我的线程被std::cin >> var
调用阻塞,所以我不能使用布尔值来存储线程应该停止的事实。
我想知道是否有在线程中使用 std::cin 的好方法(std::thread)或替代解决方案。