我正在寻找一个跨平台的C ++主/工作库或工作队列库。一般的想法是我的应用程序将创建某种Task或Work对象,将它们传递给工作主机或工作队列,这反过来又会在单独的线程或进程中执行工作。为了提供一些上下文,应用程序是一个CD开膛手,我想要并行化的任务是“rip track”,“将WAV编码为Mp3”等等。
我的基本要求是:
如果这个库也是特别好的:
通过类比,我正在寻找类似于Java的ExecutorService或其他类似的线程池库,但是在跨平台的C ++中。有谁知道这样的野兽?
谢谢!
答案 0 :(得分:3)
我没有长时间使用它,我不肯定它是否完全符合您的需求,但请查看Adaptive Communications Environment (ACE)。该库允许您构造具有工作队列的“活动对象”并在其自己的线程中执行其主体,以及可以在对象中共享的线程池。然后,您可以将队列工作对象传递给活动对象以供其处理。对象可以以各种方式链接。图书馆相当繁重,有很多值得学习的东西,但是已经写了几本关于它的书籍,还有大量的在线教程信息。它应该能够做你想要的一切以及更多,我唯一关心的是它是否拥有你正在寻找的“开箱即用”的接口,或者你是否需要在它之上构建以获得你正在寻找的东西对
答案 1 :(得分:2)
我认为这需要英特尔Threading Building Blocks,这几乎可以满足您的需求。
答案 2 :(得分:2)
查看英特尔的Thread Building Blocks库。
答案 3 :(得分:1)
听起来你需要某种“时间共享系统”。
那里有一些很好的开源软件,但我不知道 如果他们有内置的QT插槽支持。
答案 4 :(得分:0)
对于你需要的东西来说,这可能是一个巨大的矫枉过正,但仍然值得一提 -
BOINC是用于此类任务的分布式框架。有一个主服务器可以执行要执行的任务以及执行其出价的工作云。它是SETI @ Home等众多项目背后的框架。
答案 5 :(得分:0)
请参阅此文章,了解如何使用C ++中的boost库创建线程:
Simple example of threading in C++
(即使标题为c,它也是一个c ++线程)
基本上,创建自己的“主”对象,该对象接受一个“可运行”对象,并在新线程中启动它。
然后你可以创建实现“runnable”的新类,并在你想要的任何旧时间将它们交给你的主跑步者。