在C ++中为输出运行辅助线程

时间:2011-03-15 16:43:53

标签: c++ multithreading

我正在寻找一种专门用于在C ++中输出数据的线程的可移植方法。如果可能的话,我宁愿远离Boost,但如果它是最好的选择,我不反对使用它。

情况如下: 我有一个程序,它对一些读取的数据进行复杂的计算,并生成三个带有大量文本数据的输出流。使用Bzip2库动态压缩这三个流。 我想要做的是让主计算在主线程中运行,而数据的压缩和输出在三个额外的线程中完成。我的想法是,通过这种方式,我可以利用可用的计算核心,消除Bzip2压缩可能导致实际处理的任何瓶颈。

我想象这种工作的方式是让三个输出线程具有打开的输出文件流并等待字符串数据然后被压缩和输出。主线程将运行其计算,在必要时将输出发送到其他线程。显然,必须设计足够的缓冲,但这不是问题。

我很欣赏有关解决此问题的最佳方法的任何建议,特别是哪些C ++库最适合手头的任务。请记住,我想在输出线程中处理缓冲,并且它们应该接收字符串类数据。

提前致谢!

3 个答案:

答案 0 :(得分:1)

C ++不支持其标准中的线程(至少现在不支持),并且要移植线程必须使用某些库。有许多 C ++库为您提供可移植的线程,并且您的特定问题在任何方面都不是特别的。 Boost非常受欢迎并被采用,并且最有可能影响C ++标准的未来版本。它既高效又便携,为什么不使用呢?

答案 1 :(得分:0)

你应该真的使用Boost.Thread库。它具有良好的文档,测试和轻量级(与具有多平台线程支持的全功能库相比,如Qt)。

答案 2 :(得分:0)

看看Boost ASIO:http://www.boost.org/doc/libs/1_44_0/doc/html/boost_asio/overview/core/async.html

在线程组织方面非常灵活。事实上,您可能会重新考虑您的设计并完全摆脱其他线程。但它也支持你的想法。