问题标签 [boost-thread]

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 投票
2 回答
11137 浏览

c++ - 为提升线程命名?

是否可以为 a 命名,boost::thread以便调试器表和崩溃日志更具可读性?如何?

0 投票
4 回答
7102 浏览

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

这是创建 thread_group 并并行执行所有线程的代码:

此代码将一次执行所有线程。我想要做的是将它们全部并行执行,但最多并行执行 4 个。当 on 终止时,将执行另一个,直到没有更多要执行。

0 投票
1 回答
7319 浏览

boost-thread - boost::thread 并创建一个池!

boost::thread 类有一个默认构造函数,它给出一个“非线程”,那么什么是

boost::thread t1;

适合吗?我可以给它一个稍后在代码中执行的函数吗?

还有一个问题:

我正在尝试编写一个具有分阶段架构(SEDA)的小型服务器,每个阶段都有许多工作线程,并且这些阶段与事件队列连接。当我使用 boost::thread_group 像这样创建具有 4 个工作线程的池时:(我已经删除了队列上的条件变量以在此处进行清理,并且还假设队列的大小始终为 4N。)

thread_group 的大小不断增长。组中那些已经完成的线程会发生什么?我如何重用这些线程并将thread_group大小保持在4?

我看到了这个问题,而不是上面的代码使用了这个:

那么有什么区别,哪个性能更好?会不会有内存泄漏?还是有另一种方法来创建一个简单的线程池?

我会很感激任何帮助。非常感谢。

0 投票
2 回答
2202 浏览

mfc - 将 BOOST 1.35 升级到 1.43 会导致 __pRawDllMain 的链接器错误(mfc 相关)

在工作中,我们有一个使用 1.35 构建良好的 MFC 扩展 DLL,但使用 1.43 构建时会导致以下错误:

如果我激活 BOOST_LIB_DIAGNOSTIC 旧的构建列表:

所以没有改变与哪个库链接

完整的错误信息是:

我在两个库版本中对 tss_pe.cpp 做了一个差异,它们是相同的,所以我不确定问题是什么。

您可以通过定义让消息消失,BOOST_THREAD_USE_DLL但是我们需要发送 BOOST_THREAD-VC71-MT-GD-1_43.DLL 所以我认为这不是最好的解决方案。

0 投票
3 回答
49836 浏览

shared-ptr - shared_ptr 断言像素!= 0 失败

我有一个相当复杂的多线程应用程序(服务器),有时会由于断言而崩溃:

我一直无法查明原因,想知道这是 boost::shared_ptr 的问题还是我的问题?

我尝试了 g++ 4.4.3-4ubuntu5 和 llvm-g++ (GCC) 4.2.1 优化和不优化以及 libboost1.40-dev (= 1.40.0-4ubuntu4)。

0 投票
1 回答
294 浏览

boost - 在 C++ 应用程序中可以使用多个 Boost.Thread 实例吗?

我有一个使用 Boost.Threads 作为 DLL(特别是 Mac OS X 框架)的插件架构的应用程序。我正在尝试编写一个也使用 Boost.Threads 的插件,并希望静态链接到库中。一切正常,但应用程序很快在我的插件中崩溃,在 Boost.Threads 代码的深处。链接到 Boost.Threads 的 DLL 版本似乎可以解决问题,但我希望我的插件是独立的。

是否可以有两个具有这种设置的 Boost.Threads 实例(一个作为 DLL,一个静态链接在另一个 DLL 中)?如果是这样,我可能缺少什么来使这两个实例相处融洽?

0 投票
1 回答
976 浏览

c++ - Boost Thread 在创建为类的成员函数时不会分离

我的代码的简化版本如下所示:

这个程序等待线程完成执行然后退出,即使我在线程上调用了分离方法。如果我删除该类,并仅在一个函数中创建我的线程,这似乎可以按预期工作。

我认为这与仍在内存中的对象有关。但是我是 C++ 学习者,不知道如何解决这个问题。

0 投票
7 回答
55940 浏览

c++ - Boost线程错误:未定义的引用

我跑了试图编译这个程序,并得到了这些错误:

谁能告诉我为什么我会收到这个错误?

0 投票
5 回答
418 浏览

c++ - 如何使 Boost 线程串行运行,而不是并行运行?

我有一段代码使用 Boost 线程来加快计算速度,但我需要对其进行调试并希望串联运行它们,而不是并行运行。我怎么做?

0 投票
2 回答
1070 浏览

c++ - 为什么将友元函数定义为结构的一部分 - boost thread_data?

我试图理解一些导致 PC-Lint 悲伤的 boost 代码,并以一种我认为不合法的 C++ 但在 VS2008 中编译正常的方式使用了friend关键字。

我以为我将朋友理解为声明类和函数的一种方式。我认为在这样的函数定义上使用是不合法的。但是,MSDN 页面非常具体:

友元函数可以在类声明中定义。这些函数是内联函数,就像成员内联函数一样,它们的行为就像是在看到所有类成员之后但在类范围关闭之前(类声明的结尾)立即定义的。

在类声明中定义的友元函数不在封闭类的范围内;它们在文件范围内。

所以我明白这是合法的,如果不寻常的语法。

我不确定它会得到什么,因为声明朋友的正常原因是增加访问权限。但是,结构的成员默认情况下都是公共的,因此这里没有这样的好处。

我是否遗漏了一些深刻的东西,或者这只是一些风格上的提升问题,有人不喜欢在结构体之后放置内联自由函数?

请注意,_InterlockedIncrement 是 Win32 上的内在函数。

更新

感谢 Chubsdad 在下面的回答,我想我现在明白了,我对正在发生的事情的总结:

  • 他们希望这些表现得像自由函数,所以你可以编译intrusive_ptr_add_ref(somePtrToThreadData)
  • 如果它们是在结构之后定义的自由函数,它们将在全局命名空间中可见
  • 将它们放在带有friend限定符的结构中意味着它们在结构内的范围内但不是成员函数,因此表现得更像静态函数
  • 依赖于参数的查找意味着它们在使用时会被找到,就好像它们是自由函数一样
    • 上述组合意味着它们的行为就好像它们是使用自由函数语法的虚函数(将显式数据块作为参数而不是在其上调用)