草庐IT

c++ - 为什么 Valgrind 使用 boost::thread 显示堆栈使用量增加?

写了一个简单的测试:#include#includeusingnamespacestd;voidmyThreadRun(){coutValgrindMassif在其上显示以下图表:(堆栈分析已启用。平台:LinuxUbuntux86)。这个程序实际上似乎没有内存泄漏:内存使用是稳定的。我想知道:这是Valgrind还是boost::thread的问题?还是我误解了什么?你会怎么解释? 最佳答案 这不是boost::threads,它也发生在普通的pthreads上。我从here获取了示例程序(Pthread创建和终止),将线程数增加

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

Visual Studio 11 中的 c++11 thread_local 关键字支持

所以有一个listofc++11featuressupportedbyvisualstudio.thread_local支持被标记为部分。我无法在这里找到对部分支持的确切含义的解释。他们只是别名__declspec(thread)吗?我可以只使用boost::thread_specific_ptr,但似乎有一些报告boost::thread_specific_ptrisslow.这可能是真的,也可能不是。具体来说,我想要最新的linux+gcc和windows+msvc上的x86/x64上的快速TLS。快速意味着尽可能不进行系统调用(我认为这对于上述平台是可能的。)

c++ - Qt 4.7 : TCP thread, 数据传输导致内存泄漏

我自己已经解决了这个问题,赏金不会被授予。该问题是由非GUI线程启动的GUI操作引起的。Qt4.7OSX10.6.8应用程序中有很多代码,但并不涉及正在发生的事情。数据内存泄漏发生在单个连接的上下文中,该连接在单个Qt线程内打开、读取、写入和关闭。我使用固定内存对象(pMsg)来保存我的消息,然后将它们发送到外部设备,如下所示:m_pTcpSocket->write((char*)pMsg->Buf8,(qint64)pMsg->GetLength());Buf8是一个2048字节的静态数组。GetLength是消息的前16位并针对0xFF,因此是一个从0到255的数字。对于这些消息,

C++11 std::thread::detach 和访问共享数据

如果您在std::thread和主线程(或任何其他线程)之间有共享变量,即使您执行,您仍然可以访问这些共享变量吗?thread::detach()创建线程后立即方法? 最佳答案 是的!调用detach()后仍可访问全局、​​捕获和传入的变量.但是,如果您正在调用detach,很可能您希望从创建线程的函数中返回,从而允许线程对象超出范围。如果是这种情况,您必须注意该函数的任何本地变量都没有通过引用或指针传递给线程。您可以将detach()视为线程不需要创建线程本地的任何内容的声明。在以下示例中,一个线程在超出范围后继续访问起始线程堆栈

c++ - MinGW 错误 : ‘thread’ is not a member of ‘std’

我正在尝试为Windows交叉编译一个简单的应用程序:#includevoidFunc(){return;}intmain(){std::threadthr1(Func);thr1.detach();return0;}这就是我得到的:$i686-w64-mingw32-g++-static-libstdc++-static-libgcc-pipe-g-std=c++0x./threadstutor.cpp./threadstutor.cpp:Infunction‘intmain()’:./threadstutor.cpp:8:3:error:‘thread’isnotamemberof

C++11 std::thread vs windows CreateThread

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭8年前。Improvethisquestion哪个选项更适合在VisualC++下创建(和管理)线程:C++11std::thread或WinAPI函数(例如CreateThread、_beginthreadex等)以及为什么? 最佳答案 便携性std::thread是C++11标准的新内容-使用它,您可以在支持C++11的编译器之间用C++编写可移植代码。你可以在其中感受到fut

C++11:GCC 4.8 静态 thread_local std::unique_ptr 未定义引用

我需要为将通过宏访问的每个线程存储一个唯一指针。我想我应该用一个单例和静态thread_localstd::unique_ptr对象来解决这个问题。这是代码的简化版本:main.cpp#include#include#include#includeusingnamespacestd;#include"yay.hpp"mutexcoutMutex;voidyay(intid){int*yayPtr=getYay();//IknowthisisbadcoutMutex.lock();couthappy;for(inti=0;i耶.hpp#ifndefBE_HAPPY#defineBE_HA

c++ - 可以使用 boost::asio::thread_pool 来代替 boost::asio::io_context 与 boost::thread::thread_group 的组合吗?

我正在努力解决我的一些困惑。我偶然发现了boost::asio::thread_pool并且我认为可以使用以某种方式自动组合boost::asio::io_context和boost::thread::thread_group就像经常建议的那样(here或here)。似乎这个asio特定的池可用于post任务,但另一方面,一些网络类型,如resolver需要将对象io_context作为构造函数参数传递,而thread_pool不是也不是从该参数派生的。 最佳答案 假设你有一个单独的io_context对象,名为ioc。您可以创建多