5

我正在寻找一个跨平台的 C++ master/worker 库或工作队列库。一般的想法是,我的应用程序将创建某种任务或工作对象,将它们传递给工作主机或工作队列,然后它们将在单独的线程或进程中执行工作。为了提供一些上下文,该应用程序是一个 CD ripper,我想要并行化的任务是“rip track”、“encode WAV to Mp3”等。

我的基本要求是:

  • 必须支持可配置数量的并发任务。
  • 必须支持任务之间的依赖关系,这样任务在它们所依赖的所有任务都完成之前不会执行。
  • 必须允许取消任务(或者至少不阻止我将取消编码到我自己的任务中)。
  • 必须允许将状态和进度信息报告回主应用程序线程。
  • 必须在 Windows、Mac OS X 和 Linux 上工作
  • 必须是开源的。

如果这个库也能:

  • 与 Qt 的信号/槽机制集成。
  • 支持使用线程进程来执行任务。

打个比方,我正在寻找类似于 Java 的 ExecutorService 或其他一些类似的线程池库的东西,但在跨平台 C++ 中。有人知道这样的野兽吗?

谢谢!

4

6 回答 6

3

我使用它的时间不够长,因此我不确定它是否完全满足您的需求,但请查看自适应通信环境 (ACE). 该库允许您构建具有工作队列的“活动对象”,并在它们自己的线程中执行它们的主体,以及可以在对象之间共享的线程池。然后,您可以将队列工作对象传递给活动对象以供它们处理。对象可以以各种方式链接。图书馆相当繁重,有很多东西要学,但是已经有几本关于它的书,网上也有相当多的教程信息。它应该能够做你想做的一切以及更多,我唯一关心的是它是否拥有你正在寻找的“开箱即用”的接口,或者你是否需要在它之上构建以获得你正在寻找的东西为了。

于 2009-06-29T22:34:29.213 回答
2

我认为这需要英特尔的Threading Building Blocks,它几乎可以满足您的需求。

于 2009-06-29T22:45:37.273 回答
2

查看 Intel 的Thread Building Blocks库。

于 2009-06-29T22:52:12.657 回答
1

听起来您需要某种“分时系统”。

那里有一些不错的开源软件,但我不知道
它们是否有内置的 QT 插槽支持。

于 2009-06-29T22:28:27.307 回答
0

对于您需要的东西,这可能是一个巨大的矫枉过正,但仍然值得一提 -
BOINC是用于此类任务的分布式框架。有一个主服务器,它提供要执行的任务,还有一个工作人员云来执行它的命令。它是 SETI@Home 和许多其他项目背后的框架。

于 2009-06-29T22:21:15.903 回答
0

请参阅这篇文章以使用 C++ 中的 boost 库创建线程:

C++中线程的简单示例

(它是一个 c++ 线程,即使标题是 c)

基本上,创建您自己的“主”对象,该对象采用“可运行”对象并开始在新线程中运行。

然后,您可以创建实现“可运行”的新类,并在您想要的任何旧时间将它们交给您的主运行器。

于 2009-06-29T22:40:27.190 回答