问题标签 [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 投票
4 回答
15746 浏览

c++ - 我可以使用 Boost Signals2 和 Threads 在 C++ 中创建软件看门狗定时器线程吗?

我目前正在单线程应用程序中从其他人的库中运行函数 Foo 。大多数时候,我打电话给 Foo,它真的很快,有时,我打电话给 Foo,它需要很长时间。我不是一个有耐心的人,如果 Foo 要永远占用,我想停止执行 Foo 并且不使用这些参数调用它。

以受控方式调用 Foo 的最佳方法是什么(我当前的环境是 POSIX/C++),这样我可以在一定秒数后停止执行。我觉得在这里做的正确的事情是创建第二个线程来调用 Foo,而在我的主线程中,我创建了一个计时器函数,如果第二个线程超时,它最终会发出信号。

还有另一种更合适的模型(和解决方案)吗?如果没有,Boost 的 Signals2 库和 Threads 会起作用吗?

0 投票
2 回答
3427 浏览

c++ - 提升线程取消

你能像取消 pthread 一样取消 Boost Thread 吗?

我正在编写一个简单的看门狗来在工作线程崩溃时终止它们,并且似乎没有办法简单地取消 Boost Thread 库中的线程。

0 投票
2 回答
1585 浏览

c++ - boost::thread 崩溃

我将 wxwidgets 与 boost::thread 一起使用。Thread 是一个工作线程,它向 GUI 发送一些事件:

线程创建:

向 GUI 发送消息:

在 Windows 下我看不到任何问题,但是在 Linux (Ubuntu 8.10) 下启动应用程序时,它会停止并显示以下错误消息:

我错过了什么?当 workerFunction 没有在线程中启动时,它可以正常工作。

问候,/mspoerr

0 投票
1 回答
245 浏览

c++ - 使用 Metrowerks 编译器解决 boost.thread 编译错误

我正在尝试将 boost.thread 与 metrowerks codewarrior 5.5.3 一起使用;在标头 thread.hpp 中,我收到他正在重新定义 thread::thread_data 的错误:

我看到,实际上,thread::thread_data 似乎被声明了两次。那里使用了哪些 C++ 功能?我怎样才能克服编译器的缺陷?

0 投票
1 回答
1417 浏览

c++ - 在禁用 MSVC 语言扩展的情况下使用 Boost.Thread 标头

我刚刚发现,在 MSVC 中禁用语言扩展时,如果您尝试包含以下内容,则会收到此错误boost/thread/thread.hpp

致命错误 C1189:#error:“线程支持不可用:它已被明确禁用BOOST_DISABLE_THREADS

似乎当 Boost 检测到语言扩展被禁用(_MSC_EXTENSIONS未定义)时,他们定义BOOST_DISABLE_WIN32,以表明包含不安全windows.h(如果没有启用扩展,它将无法编译)。

作为#define的结果BOOST_DISABLE_THREADS,即使Boost.Thread 不是一个仅包含头文件的库,并且windows.h只包含在.cpp 文件中,它也被定义了。标头原则上应该在没有语言扩展的情况下安全使用。所有实际的 win32 调用都隔离在编译库(.dll 或 .lib)中

我可以在这里看到他们已经意识到了这个问题,但是由于过去两年它一直没有受到影响,因此希望快速解决可能是天真的。

#ifdef修改一些's 和各种 Boost 配置文件似乎应该是一个相当简单的案例#defines,但是其中有很多,它们定义和使用了很多我不清楚目的的宏.

有谁知道在禁用语言扩展时允许包含 Boost.Thread 标头的简单黑客或解决方法?

0 投票
4 回答
32649 浏览

c++ - (简单)提升线程组问题

我正在尝试编写一个相当简单的线程应用程序,但对 boost 的线程库还是陌生的。我正在研究的一个简单的测试程序是:

但是,当我编译并运行这个程序时,我得到一个输出

显然,结果是正确的,但我担心这个错误消息,特别是因为具有基本相同结构的实际程序卡在 join_all() 点。有人可以向我解释发生了什么吗?有没有更好的方法来做到这一点,即启动多个线程,将它们存储在外部容器中,然后等待它们全部完成后再继续程序?

谢谢你的帮助。

0 投票
1 回答
2029 浏览

c++ - boost.thread 死锁和自删除

boost::thread_group用来创建(使用 thread_group::create_thread())和调度线程。为了限制最大线程数,在每个线程结束时,我从线程中thread_group删除线程并删除线程本身(以便我可以决定是否需要创建新线程)。然而,它在最后一个线程的创建和删除之间挂起(比如总共 999 个线程中的第 999 个)。

我的问题是:

  • 可以像我一样从内部删除线程吗?如果没有,实现这一目标的最佳方法是什么
  • 为什么我的代码挂起?

下面是相关代码:

//1- 创建和调度线程的代码

//2-线程执行代码

//3- 删除线程本身的代码

0 投票
3 回答
3955 浏览

c++ - C、C++、C++0x、pthread 和 boost 中的线程

关于 C/C++ 中线程的问题...

C++0x 语法

有多少个线程?两个(x 和 y)还是三个(x、y 和 main)?我可以打电话给this_thread::yield()主吗?我从this_thread::get_id()main 中调用得到什么?

pthread 语法

有多少个线程?两个(x 和 y)还是三个(x、y 和 main)?我可以打电话给pthread_yield()主吗?我从pthread_self()main 中调用得到什么?

提升语法

有多少个线程?两个(x 和 y)还是三个(x、y 和 main)?我可以打电话给boost::this_thread::yield()主吗?我从boost::this_thread::get_id()main 中调用得到什么?

0 投票
2 回答
717 浏览

c++ - 提升 microsec_time_clock.hpp 警告 C4244

我是使用 boost 的新手,但遇到了问题。我的项目中需要 shared_mutex 函数。所以我已经完成了

并编译了我的项目。我的带有“将警告视为错误”的 MSVC 2005 由于出现警告而停止编译:

c:\\...\microsec_time_clock.hpp(103) : warning C4244: 'argument' : conversion from 'int' to 'unsigned short', possible loss of data

我不知道,为什么 shared_mutex 需要微秒函数(我读过比 boost 库有相当大的依赖列表),但我无法编译我的项目。我用谷歌搜索了一下,发现同样的问题,但没有决定。

更新:我现在正在编译 boost,但我想将所有源代码放入我的开源项目,包括 boost.thread.shared_mutex。

0 投票
6 回答
7728 浏览

c++ - 在哪些平台上线程本地存储受到限制,可用的空间有多少?

我最近意识到线程本地存储在某些平台上是有限的。例如,C++ 库 boost::thread 的文档如下:

“注意:可以创建的线程特定存储对象的数量有一个特定于实现的限制,这个限制可能很小。”

我一直在寻找尝试找出不同平台的限制,但我一直无法找到权威的表格。如果您正在编写使用 TLS 的跨平台应用程序,这是一个重要的问题。Linux 是我找到信息的唯一平台,其形式是 Ingo Monar 在 2002 年向内核列表发送了一个补丁,添加了 TLS 支持,他在其中提到,“TLS 区域的数量是无限的,并且没有相关的额外分配开销支持 TLS。” 如果在 2009 年仍然如此(是吗?),那真是太棒了。

但是今天的 Linux 呢?操作系统?视窗?索拉里斯?嵌入式操作系统?对于在多种架构上运行的操作系统,它是否因架构而异?

编辑:如果您好奇为什么可能会有限制,请考虑线程本地存储的空间将被预先分配,因此您将在每个线程上为此付出成本。面对大量线程,即使是少量也可能是个问题。