问题标签 [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 回答
21737 浏览

c++ - C++11 std::thread 给出错误:没有匹配的函数来调用 std::thread::thread

我正在使用此代码测试 c++11 线程,但是在创建线程时,我遇到错误no matching function for call to 'std::thread::thread()'

这就像我给 std::thread ctr 的函数有问题,但我不明白它是怎么错的。它不完整,但在我看来是正确的:

标题:

资源:

0 投票
2 回答
239 浏览

c++ - 两个相同的(网络)调用。如何等待最快,并丢弃最慢?

在 c++11 中,如何实现一个程序,该程序执行两个相同类型的昂贵(网络)调用,然后只等待较快的结果,而不是等待和丢弃较慢的结果。std::thread 不能被中断并且不返回方便的 std::future。并且返回未来的 std::async 既不能中断也不能分离。

两个主要问题是: - 更快结果到达时的通知。- 终止(和清理)较慢的线程。

0 投票
2 回答
1133 浏览

c++ - asio .async_* 不会运行,除非主线程调用 io_service.run

我最近一直在玩 boost asio 和一些新的 c++11 结构。这是导致意外行为的示例代码部分(至少对我而言)。

在调用 Server::startAccept 之前,我创建了一个 io_service::work 实例和一个名为 io_service_.run() 的 std::thread 池。在我调用 startAccept 之后,主线程只是等待命令行输入。

我希望我的线程池中的一个线程在连接启动时运行 Server::accept_handler。这不会发生。相反,我必须从主线程调用 io_service_.run() 。

现在我玩了一会儿,发现我可以通过这样做来实现所需的行为:

.async_* 操作和 io_service.post 有什么区别?

编辑:定义 BOOST_ASIO_ENABLE_HANDLER_TRACKING

当我编译并运行我的程序,然后使用我包含的第一个代码块连接到服务器时,这是输出:

当我运行包含的第二个代码块并连接到服务器时,我得到以下输出:

编辑 2:线程创建洞察力

0 投票
4 回答
3508 浏览

c++ - std::thread,类构造函数和析构函数

在 C++11 中测试线程时,我创建了以下示例:

打印以下内容:

在此处输入图像描述

为什么要为线程调用 6 次析构函数?为什么线程报告不同的内存位置?

编辑 添加移动和复制构造函数输出时:

在此处输入图像描述

0 投票
4 回答
38078 浏览

c++ - C ++ 11:std :: thread池化?

在 C++03 中,我将 pthread 与自建线程池一起使用,该线程池始终保持几个线程运行(因为pthread_create速度很慢),这样我就能够为小任务启动线程,而无需考虑性能问题。

现在,在 C++11 中,我们有std::thread. 我想标准没有说明具体的实现,所以我的问题是关于标准库的实现。他们通常会选择构建std::threads 便宜(例如不调用pthread_createposix)的池化方法,还是std::thread只是一个包装器?

换句话说,在 C++11 中是否仍然推荐使用线程池,还是应该std::thread在需要时创建一个线程池并将性能留给标准库?

0 投票
1 回答
1547 浏览

c++ - 为什么这个程序会抛出“std::system_error”?

可能重复:
为什么这个简单的 std::thread 示例不起作用?

代码:

问题:

“Abortado”在我的语言环境中意味着“中止”。

0 投票
1 回答
4547 浏览

c++ - 使用 native_handle() + pthread_cancel() 取消 std::thread

我正在将 pthreads 的先前线程包装器转换为 std::thread。但是 c++11 没有任何方法可以取消线程。尽管如此,我还是需要取消线程,因为它们可能在外部库中执行非常冗长的任务。

我正在考虑在我的平台上使用为我提供 pthread_id 的 native_handle。我在 Linux(Ubuntu 12.10)中使用 gcc 4.7。这个想法是:

线程被 pthreads 抛出的异常取消。

我的问题是:

这种方法会有什么问题(除了不便携)?

0 投票
4 回答
9474 浏览

c++ - 使用 std::lock (c++11) 的大量 CPU 负载

我最近实现线程/互斥锁管理器的努力最终导致 75% 的 CPU 负载(4 核),而所有四个正在运行的线程要么处于睡眠状态,要么等待互斥锁解锁。

特定的类太大了,无法在这里完全发布,但我可以将原因缩小到死锁安全地获取两个互斥锁

该类的另一部分使用std::condition_variablewithwait()notify_one()onmutex1来同时有选择地执行某些代码。

简单的改变

将 CPU 使用率降至正常的 1-2%。

我不敢相信,这个std::lock()功能是那么低效。这可能是 g++ 4.6.3 中的错误吗?

编辑:(示例)

0 投票
1 回答
11927 浏览

c++ - 标准::线程错误

我试图从我的类中生成一个线程,并且该线程在我的类中执行一个特定的方法。代码如下所示:

此编译代码引发错误说

我不确定这里的实际错误是什么。有人可以帮我弄这个吗?

谢谢。

0 投票
2 回答
58204 浏览

c++ - 我想杀死一个 std::thread 使用它的线程对象?

可能重复:
C++0x 线程中断

我试图通过使用它的线程对象来杀死/停止一个 c++ std::thread。

我们应该怎么做?