5

クロスプラットフォームの C++ マスター/ワーカー ライブラリまたはワーク キュー ライブラリを探しています。一般的な考え方は、私のアプリケーションがある種の Task または Work オブジェクトを作成し、それらを作業マスターまたは作業キューに渡し、それが別のスレッドまたはプロセスで作業を実行するというものです。少しコンテキストを提供するために、アプリケーションは CD リッパーであり、並列化したいタスクは「トラックのリッピング」、「WAV から Mp3 へのエンコード」などです。

私の基本的な要件は次のとおりです。

  • 構成可能な数の同時タスクをサポートする必要があります。
  • 依存するすべてのタスクが完了するまでタスクが実行されないように、タスク間の依存関係をサポートする必要があります。
  • タスクのキャンセルを許可する必要があります (または、少なくともキャンセルを自分のタスクにコーディングすることを妨げないでください)。
  • ステータスと進行状況の情報をメイン アプリケーション スレッドに報告できるようにする必要があります。
  • Windows、Mac OS X、および Linux で動作する必要があります
  • オープンソースでなければなりません。

このライブラリも次の場合は特に便利です。

  • Qt のシグナル/スロット メカニズムと統合されています。
  • タスクを実行するためのスレッドまたはプロセスの使用をサポートしました。

類推として、私は Java の ExecutorService または他の同様のスレッド プーリング ライブラリに似たものを探していますが、クロスプラットフォームの C++ です。そのような獣を知っている人はいますか?

ありがとう!

4

6 に答える 6

3

私はそれを十分に長く使用していないので、それがあなたのニーズを正確に満たしているかどうか確信が持てませんが、Adaptive Communications Environment (ACE)をチェックしてください。. このライブラリを使用すると、作業キューを持ち、その本体を独自のスレッドで実行する「アクティブ オブジェクト」と、オブジェクト間で共有できるスレッド プールを構築できます。次に、キュー作業オブジェクトをアクティブなオブジェクトに渡して、それらが処理できるようにします。オブジェクトはさまざまな方法で連鎖できます。ライブラリはかなり重く、学ぶべきことがたくさんありますが、それについて書かれた本が数冊あり、オンラインでもかなりの量のチュートリアル情報が入手できます. 必要なすべての機能に加えて、それ以上のことができるはずです。私の唯一の懸念は、「すぐに使える」探しているインターフェイスを備えているかどうか、または探しているものを正確に取得するためにその上に構築する必要があるかどうかです。為に。

于 2009-06-29T22:34:29.213 に答える
2

これには intel のThreading Building Blocksが必要だと思います。これは、あなたが望むことをほとんど行います。

于 2009-06-29T22:45:37.273 に答える
2

Intels の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++ でブースト ライブラリを使用してスレッドを作成する方法については、この投稿を参照してください。

C++ でのスレッド化の簡単な例

(タイトルに c と書いてありますが、これは c++ スレッドです)

基本的に、「実行可能な」オブジェクトを受け取り、新しいスレッドで実行を開始する独自の「マスター」オブジェクトを作成します。

次に、「実行可能」を実装する新しいクラスを作成し、必要に応じていつでもそれらをマスター ランナーに渡すことができます。

于 2009-06-29T22:40:27.190 に答える