草庐IT

thread_pool_size

全部标签

c++ - 类中的 boost::thread

我正在尝试创建一个类,该类在创建时会启动一个后台线程,类似于以下内容:classTest{boost::threadthread_;voidProcess(){...}public:Test(){thread_=boost::thread(Process);}}我无法编译它,错误是“没有匹配函数调用boost::thread::thread(未解析的函数类型)”。当我在类之外这样做时,效果很好。如何让函数指针起作用? 最佳答案 你应该将thread_初始化为:Test():thread_(){}Process是类Test的成员非静态

c++ - std::thread 有多标准?

我注意到很多经典的C++引用资源已经针对C++11进行了更新,例如cplusplus.com和JosuttisStandardLibraryReference本书,似乎没有涵盖/根本没有任何关于C++11并发标准库功能的文档,例如std::thread、std::atomic和std::async。这些并发特性是否比标准库的其余部分“不那么标准”?还是由于其他原因缺少文档? 最佳答案 您引用的所有库确实是C++11标准的一部分。事实上,许多语言规则都经过重新编写以描述操作在多线程环境中的工作方式(以前,规范没有指定线程如何工作的任何

c++ - 线程: Termination of infinite loop thread in c++

我试图编写一个线程,该线程将在我的主程序的后台运行并监视某事。在某个时候,主程序应该向线程发出信号以使其安全退出。这是一个最小示例,该示例以固定的时间间隔将本地时间写入命令行。#include#include#include#include#includeintfunc(bool&on){while(on){autot=std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());std::coutfi=std::async(std::launch::async,func,on);std::this_thr

C++:array.size() 是循环的良好条件吗?

如果有一个名为arr的vector,其中包含大量数据,我要打印该vector中的所有值。我要么使用:intarr_size=arr.size();for(inti=0;i或者这样实现:for(inti=0;i在我看来,第一种实现方式会将vector的大小提取到缓存中,从而使条件在第一次未命中后更快。第二次实现呢?是不是比较慢?每次满足条件时系统都会调用size()方法吗?编辑:假设它正在使用C++。 最佳答案 概括为具有任意主体的循环,您给出的两个变体之间存在一个关键区别:如果arr的大小在循环期间发生变化怎么办?对于第二种情况,如

c++ - 字符串类中 size() 和 at() 的不正确行为

我有这个代码:stringtest("żaba");cout输出很奇怪:Word:żabaLength:5Letter:�如您所见,长度应为4,字母:“ż”。如何更正此代码以使其正常工作? 最佳答案 你的问题没有提到编码,所以我要在黑暗中刺探一下,说这就是原因。第一步:阅读TheAbsoluteMinimumEverySoftwareDeveloperAbsolutely,PositivelyMustKnowAboutUnicodeandCharacterSets(NoExcuses!).在那之后,应该清楚“裸字符串”这样的东西并不

C++11 - 无法使用 std::thread 和 std::condition_variable 唤醒线程

当我试图通过另一个线程唤醒一个线程时遇到了一个问题。一个简单的生产者/消费者。代码下方。第85行是我不明白为什么它不起作用的地方。生产者线程填充std::queue并调用std::condition_variable.notify_one()而消费者线程正在等待NOTstd::queue.empty()。在此先感谢您的帮助#include#include#include#include#include#include//requestclassrequest:publicstd::mutex,publicstd::condition_variable,publicstd::queue{

c++ - 在 C++11 智能指针中存储 std::thread

在C++11及更高版本中,像这样直接将std::thread存储为类的成员时,有什么优点或缺点:std::threadmy_thread;与像这样将std::shared_ptr或std::unique_ptr存储到线程相反:std::shared_ptrmy_thread_ptr;是否有任何代码选项比其他选项更好?或者没关系,只需2种不同的方式来处理线程对象。 最佳答案 使用指针(或智能指针)成员可能有一些不太常见的原因,但对于常见用法,似乎是std::thread要么不适用,要么本身就足够灵活:我们可能希望更好地控制对象的生命周

c++ - 如何在你的 C++ 项目中包含 boost::thread?

我需要做什么才能在我的项目中包含boost::thread?我已将整个线程文件夹复制到我的工作路径(我希望能够在多台计算机上运行它)并且我得到了fatalerrorC1083:Cannotopenincludefile:'boost/thread/detail/platform.hpp':Nosuchfileordirectory来自#include"thread/thread.hpp"行什么给了?编辑:即使我只是链接到安装预编译二进制文件的boost文件夹,并且我使用#include我明白了fatalerrorLNK1104:cannotopenfile'libboost_threa

c++ - 使用 std::shared_ptr 对象实例创建 boost::thread

我有以下两个代码段。第一个block按预期编译和工作。但是第二个block不编译。我的问题是,给定下面的代码,当尝试基于由shared_ptr代理的对象实例创建线程时,正确的语法是什么?#include#include#include#includestructfoo{voidboo(){}};intmain(){//Thisworks{foo*fptr=newfoo;boost::threadt(&foo::boo,fptr);t.join();deletefptr;}//Thisdoesn'twork{std::shared_ptrfptr(newfoo);boost::threa

c++ - std::queue<T, list<T>>::size() 在 O(n) 中很慢?

我在使用队列的代码中遇到了意外的性能行为。我意识到当队列中有更多元素时性能会下降。事实证明,使用size()方法是原因。这是一些显示问题的代码:#include#include#include#include"Stopwatch.h"usingnamespacestd;structBigStruct{intx[100];};intmain(){CStopwatchqueueTestSw;typedefBigStructQueueElementType;typedefstd::queue>QueueType;//typedefstd::queueQueueType;//nosurpris