草庐IT

ZN5boost

全部标签

c++ - 使用 Boost.Asio 时确保有效对象生命周期的最佳方法是什么?

最近玩了很多Boost.Asio。我非常喜欢这个库,因为它提供了一种从当今多核系统中榨取性能的绝妙方法。我曾多次问过自己一个问题,我认为在使用Asio进行异步调用时,关于对象生命周期/所有权的问题值得一提。我反复遇到的问题是,您经常不得不“过期”一个仍然有异步回调待处理的对象。如果该对象在调用回调之前超出范围,则不可避免地会发生故障。为了解决这个问题,我使用boost::enable_shared_from_this模板作为大多数基于asio的类的基类。这工作正常,但有点麻烦:通常这也意味着保护构造函数并向类添加工厂方法以确保在shared_ptr内创建所有实例。我只是想知道其他人是如

c++ - 如何让 boost::thread_group 执行固定数量的并行线程

这是创建thread_group并并行执行所有线程的代码:boost::thread_groupgroup;for(inti=0;i此代码将一次执行所有线程。我想要做的是将它们全部并行执行,但最多并行执行4个。当on终止时,会执行另一个,直到没有更多可以执行。 最佳答案 另一个更有效的解决方案是让每个线程在完成后回调到主线程,并且主线程上的处理程序每​​次都可以启动一个新线程。这可以防止对timed_join的重复调用,因为在触发回调之前主线程不会做任何事情。 关于c++-如何让boos

c++ - 是否预计 boost::thread_specific_ptr<>::get() 的使用会很慢?有什么解决办法吗?

我目前正在使用Valgrind的“Callgrind”分析一个存在性能问题的应用程序。在查看分析数据时,似乎有25%的处理时间花在boost::detail::get_tss_data的应用程序中,其主要目的是物理模拟和可视化。get_tss_data显然是由thread_specific_ptr::get调用的有人认为这是预期的吗?它通常是否暗示其他特定的东西?编辑:我的平台是:Linux-2.6.32、x86、GCC4.4.3、libc6-2.11.1/libpthread-2.11.1 最佳答案 thread_specific

c++ - 避免 Boost Log 琐碎使用中的泄漏

我从使用booSTLog的服务器端应用程序获取valgrind泄漏报告,该应用程序与boost1.56一起分发。valgrind报告是:==8021==1,159个block中的37,088个字节在1,642的丢失记录1,613中肯定丢失了==8021==at0x4A05588:memalign(vg_replace_malloc.c:727)==8021==by0x3FDA61118F:tls_get_addr_tail(在/lib64/ld-2.12.so中)==8021==by0x3FDA61165F:__tls_get_addr(in/lib64/ld-2.12.so)==80

c++ - boost::variant 如何存储引用?

以下代码编译并执行“正确的事情”:#include#includeintmain(){inta=10;boost::variantx=a;a=20;std::cout(x)boost::variant如何存储引用?根据C++标准,如何存储引用完全取决于编译器。其实,boost::variant甚至知道引用占用了多少字节?sizeof(T&)==sizeof(T),所以它不能使用sizeof()运算符(operator)。现在,我知道引用最有可能实现为指针,但语言不能保证。一个很好的解释get当变体存储引用时,访问工作会得到加分:) 最佳答案

python - 使用 boost.python 在 python 模块中未正确释放静态 openCL 类

编辑:好的,所有的编辑都让问题的布局有点困惑,所以我会尝试重写问题(不改变内容,但改进其结构)。简而言之问题如果我将它编译为可执行文件,我有一个运行良好的openCL程序。现在我尝试使用boost.python使其可从Python调用。但是,一旦我退出Python(在导入我的模块之后),python就会崩溃。原因似乎与此有关staticallystoringonlyGPUCommandQueuesandtheirreleasemechanismwhentheprogramterminatesMWE和设置设置使用的IDE:VisualStudio2015使用的操作系统:Windows76

c++ - 在 windows 中构建 boost 的子集

我正在尝试设置boost的一个子集并使用bjam对其进行正确编译,但是我没有得到我正在寻找的结果。我正在使用boost1.37.0在Windows上工作。假设我想要构建/安装库smart_ptr和文件系统。我故意选择了一个只有头文件的库和一个需要编译库的库。我希望它们被构建到一个类似于我使用bjam构建完整的boost安装的目录结构中(即没有指定任何--with-libraryX)但当然没有我不感兴趣的所有库.我的第一种方法是在bjam中使用--with-filesystem--with-smart_ptr,但是它似乎无法识别smart_ptr(我尝试了smartptr和smart-p

c++ - 使用 boost::program_options 接受负 double

我需要能够拥有boost::program_options解析一个double组在命令行上传递。对于正double,这没问题,当然(在add_options中使用带有std::vector的多token),但是对于否定的,我知道这些都是模棱两可的论点。以下是我想要学习的演示:mycommand--extent-1.0-2.0-3.01.02.03.0--some-other-argumentsomevalueextentistobebackedbyaBoundsclasswithatleastoneconstructorthattakesinsixindividualTargument

c++ - 如何将 boost 绑定(bind)转换或转换为 C 函数指针?

假设我有这个:voidfunc(WCHAR*pythonStatement){//DosomethingwithpythonStatement}我需要像这样将它转换为void函数(void):bind(func,TEXT("console.write('test')"))现在我有这样的结构:typedefvoid(__cdecl*PFUNCPLUGINCMD)();structFuncItem{PFUNCPLUGINCMDpFunc;//...};如何将我的结构的pFunc设置为bind(func,"something")?Bind返回的lambda_functor不是函数指针,那么如

c++ - boost shared_ptr 取消引用成本

我正在尝试比较原始指针、boostshared_ptr和boostweak_ptr之间的性能。在取消引用部分,我预计shared_ptr和raw_ptr相等,但结果显示shared_ptr的速度大约是原来的两倍。对于测试,我正在创建一个带有指向int的指针或共享指针的数组,然后在这样的循环中取消引用:intresult;for(inti=0;i!=100;++i){for(inti=0;i!=SIZE;++i)result+=*array[i];}测试的完整代码可以在这里找到:https://github.com/coolfluid/coolfluid3/blob/master/tes