stdthread 相关问题

std :: thread是一个C ++ 11标准库类型,它运行一个新线程的函数

使用std::thread类时,为什么我可以传递通过引用捕获变量的lambda表达式?

我很难理解以下 std::thread 的注释(来自 cppref): 线程函数的参数按值移动或复制。如果需要将引用参数传递给第三个...

回答 1 投票 0

创建新线程时编译器错误:“调用:找不到匹配的重载函数”

我有以下C++代码: #包括 #包括 #包括 #包括 #包括 void ThreadFunc(std::vector* pInt...

回答 1 投票 0

以 std::ifstream 作为参数的 std::thresd 中出现错误

我使用了 vs2019 的 CppCLRWinformsProjekt 扩展。我需要实现一个从文件读取并将数据存储在某些变量中的线程。 线程函数如下: 私有:void startThread(std::ifstr...

回答 1 投票 0

睡眠时间非常短,为什么线程在看到停止标志设置之前只完成零次或一次打印迭代?

见下面的代码,AsyncTask 创建一个对等线程(计时器)来增加一个原子变量并休眠一段时间。预期的输出是打印 counter_ 10 次,值范围从 1 到 10,...

回答 1 投票 0

关于递增原子变量的问题?

见下面的代码,AsyncTask 创建一个对等线程(计时器)来增加一个原子变量并休眠一段时间。预期的输出是打印 counter_ 10 次,值范围从 1 到 10,...

回答 1 投票 0

为什么这段代码偶尔会挂在 std::condition_variable::wait() 上?

我已经在 C++ 中实现了一个非常标准的单消费者-多生产者模式,此外还限制了队列中的任务数量。 一个 Worker 在一个

回答 2 投票 0

这个简单的多线程代码是如何导致内存损坏的?

以下代码可靠地产生段错误。 #包括 #包括 类类{ 民众: 类(常量整数) : cinteger(整数), carray(std::array&l...

回答 2 投票 0

为什么 c++ 线程是可移动的而不是可复制的?

正如题名所说,为什么C++线程(std::thread和pthread)是可移动的而不是可复制的?如果我们让它可复制,会有什么后果?

回答 2 投票 0

将 printf 语句移动到“计数”变量的递增/递减下方时出现奇怪的线程行为

我想做的是启动 2 个线程,一个将共享资源递增 1,另一个将共享资源递减 1,借助条件变量和唯一锁。我很新

回答 1 投票 0

什么时候应该使用 std::thread::detach?

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

回答 6 投票 0

OpenCV 和 std:thread 的内存泄漏

我有一段相当简单的代码,我在一个函数(myFunction)中生成了一些 cv::Mat 图像并用它们填充了一个 std::vector,同时填充了向量,内存使用量增加了......

回答 0 投票 0

std::thread segfault with null native thread

你能帮我理解为什么这段代码会给我一个段错误吗?我创建线程的方式会不会有问题?我很难理解这个问题。 #包括 你能帮我理解为什么这段代码会给我一个段错误吗?我创建线程的方式会不会有问题?我很难理解这个问题。 #include <fstream> #include <sstream> #include <thread> #include <iostream> #include <algorithm> #include <new> #include <thread> #include <string> class temp { private: std::thread m_thread; std::vector<std::string> m_tokens; public: temp() { m_thread = std::thread(&temp::run, this); } void run() { while (1) { std::string token; std::cin >> token; if (std::ranges::find(m_tokens, token) == m_tokens.end()) { std::cout << "duplicate token" << token << "\n"; continue; } m_tokens.push_back(token); std::cout << token << " added\n"; } } void join() { m_thread.join(); } }; int main(int argc, char **argv) { temp t; t.join(); return EXIT_SUCCESS; } ThreadSanitizer:DEADLYSIGNAL ==19246==ERROR: ThreadSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7f81d5f98880 bp 0x7b0800000020 sp 0x7f81d30bf298 T19247) ==19246==The signal is caused by a WRITE memory access. ==19246==Hint: address points to the zero page. #0 __tsan_func_entry <null> (libtsan.so.0+0x9e880) #1 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (temp::*)(), temp*> > >::_M_run() /opt/rh/devtoolset-11/root/usr/include/c++/11/bits/std_thread.h:211 (trading+0x41e3a3) #2 execute_native_thread_routine <null> (trading+0x437ab3) #3 start_thread <null> (libpthread.so.0+0x7ea4) #4 clone <null> (libc.so.6+0xfeb0c) ThreadSanitizer can not provide additional info. SUMMARY: ThreadSanitizer: SEGV (/lib64/libtsan.so.0+0x9e880) in __tsan_func_entry ==19246==ABORTING 怎么可能当我直接运行它时代码运行没有任何问题,但是当作为线程运行时却出现段错误? 您必须在主线程中的 .join() 对象上调用 std::thread(例如在 temp 的析构函数中),以便让主线程等待 std::thread 管理的线程退出。 无限循环不能替代它,没有可观察到的副作用的无限循环在 C++ 中具有未定义的行为。编译器确实在它们永远不会被执行的假设下进行优化,有时甚至会为包含它们的函数(例如 Clang)编译完全无意义的东西,或者只是简单地删除它们。

回答 1 投票 0

vector 在 std::thread 执行 operator() 时变为空

我正在尝试创建一个线程(PrinStringManager),该线程又创建多个线程(PrintEntry)(取决于传入的字符串向量的元素数量)。 每个 PrintEntry 线程

回答 1 投票 0

线程化时访问静态地图时发生故障。

考虑以下代码片段:myEnum stringToEnum(const std::string& enumString) { static const std::unordered_map conversionMap = {{"enumA", myEnum::enumA}, ...

回答 1 投票 1

std::thread 占用了 DLL 的引用次数,从而阻止了 DLL 的卸载。

我有一个windows c++ dll,它被一个第三方程序加载。我最近添加了一个线程池(这个[https:/github.comprogschjThreadPoolblobmasterThreadPool.h][1])。但是现在dll ...

回答 1 投票 0

如何在c ++中将std :: thread :: id转换为字符串?

如何在C ++中将std :: thread :: id转换为字符串?我正在尝试将std :: this_thread :: get_id()生成的输出类型转换为字符串或char数组。

回答 3 投票 16

是否可以定义std :: thread并在以后进行初始化?

我的目标是将std :: thread对象保留为数据成员,并在需要时对其进行初始化。我无法执行此操作(如下面的代码所示),因为删除了std :: thread类的副本构造函数。 ...

回答 4 投票 20


std线程构造函数使用可变参数线程函数吗?

我正在尝试将可变数量的回调函数(都具有相同的签名)传递给线程函数。我使用命名空间std提出了以下代码; void callback(int i){cout ] >>>

回答 2 投票 1

如何将可变参数传递给std :: thread?

我想通过包装C ++ 11中的std :: thread类来使用自己的Thread实现,这样我就可以像我想要的那样处理异常。这是我的包装类:#include #...

回答 1 投票 4

© www.soinside.com 2019 - 2024. All rights reserved.