问题标签 [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 给出错误:没有匹配的函数来调用 std::thread::thread
我正在使用此代码测试 c++11 线程,但是在创建线程时,我遇到错误no matching function for call to 'std::thread::thread()'。
这就像我给 std::thread ctr 的函数有问题,但我不明白它是怎么错的。它不完整,但在我看来是正确的:
标题:
资源:
c++ - 两个相同的(网络)调用。如何等待最快,并丢弃最慢?
在 c++11 中,如何实现一个程序,该程序执行两个相同类型的昂贵(网络)调用,然后只等待较快的结果,而不是等待和丢弃较慢的结果。std::thread 不能被中断并且不返回方便的 std::future。并且返回未来的 std::async 既不能中断也不能分离。
两个主要问题是: - 更快结果到达时的通知。- 终止(和清理)较慢的线程。
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:线程创建洞察力
c++ - std::thread,类构造函数和析构函数
在 C++11 中测试线程时,我创建了以下示例:
打印以下内容:
为什么要为线程调用 6 次析构函数?为什么线程报告不同的内存位置?
编辑 添加移动和复制构造函数输出时:
c++ - C ++ 11:std :: thread池化?
在 C++03 中,我将 pthread 与自建线程池一起使用,该线程池始终保持几个线程运行(因为pthread_create
速度很慢),这样我就能够为小任务启动线程,而无需考虑性能问题。
现在,在 C++11 中,我们有std::thread
. 我想标准没有说明具体的实现,所以我的问题是关于标准库的实现。他们通常会选择构建std::thread
s 便宜(例如不调用pthread_create
posix)的池化方法,还是std::thread
只是一个包装器?
换句话说,在 C++11 中是否仍然推荐使用线程池,还是应该std::thread
在需要时创建一个线程池并将性能留给标准库?
c++ - 使用 native_handle() + pthread_cancel() 取消 std::thread
我正在将 pthreads 的先前线程包装器转换为 std::thread。但是 c++11 没有任何方法可以取消线程。尽管如此,我还是需要取消线程,因为它们可能在外部库中执行非常冗长的任务。
我正在考虑在我的平台上使用为我提供 pthread_id 的 native_handle。我在 Linux(Ubuntu 12.10)中使用 gcc 4.7。这个想法是:
线程被 pthreads 抛出的异常取消。
我的问题是:
这种方法会有什么问题(除了不便携)?
c++ - 使用 std::lock (c++11) 的大量 CPU 负载
我最近实现线程/互斥锁管理器的努力最终导致 75% 的 CPU 负载(4 核),而所有四个正在运行的线程要么处于睡眠状态,要么等待互斥锁解锁。
特定的类太大了,无法在这里完全发布,但我可以将原因缩小到死锁安全地获取两个互斥锁
该类的另一部分使用std::condition_variable
withwait()
和notify_one()
onmutex1
来同时有选择地执行某些代码。
简单的改变
将 CPU 使用率降至正常的 1-2%。
我不敢相信,这个std::lock()
功能是那么低效。这可能是 g++ 4.6.3 中的错误吗?
编辑:(示例)
c++ - 标准::线程错误
我试图从我的类中生成一个线程,并且该线程在我的类中执行一个特定的方法。代码如下所示:
此编译代码引发错误说
我不确定这里的实际错误是什么。有人可以帮我弄这个吗?
谢谢。