5

TBB を使用してスレッドプールの動作を取得したいと考えています。しかし、TBB に関するドキュメントを読むときは常に、parallel-for、parallel-dowhile などについて話します。対照的に、必要なのはタスクをスレッド プールに割り当てて、それらのタスクが「独自に」実行されるようにするためのメイン スレッドです。非同期的に。ここでのタスクは、GUI のイベント処理です。

TBB タスク スケジューラはそのような動作に適していますか? タスクスケジューラーから得た印象は、分解して互いに並行して実行できるタスクがある場合にのみ有益であるということです。

4

1 に答える 1

10

バージョン 3.0 以降、TBB はタスクの非同期実行をサポートしています。そのために、特別な作品提供方法tbb::task::enqueue()が追加されました。とは異なりtbb::task::spawn()、このメソッドは、元のスレッドが などのタスク ディスパッチ メソッドに入らない場合でも、キューに入れられたタスクが実行されることを保証しますwait_for_all()

の短い使用例task::enqueue():

class MyTask : public tbb::task {
    /*override*/ tbb::task* execute() {
        // Do the job
        return NULL; // or a pointer to a new task to be executed immediately
    }
};

MyTask* t = new (tbb::task::allocate_root()) MyTask();
tbb::task::enqueue(*t);
// Do other job; the task will be executed asynchronously

コメントで @JimMishell が言及されているように、GUI イベントの処理にそれを使用する方法の例は、「デザイン パターン」にあります。メソッドの正式な説明は、リファレンス マニュアルに記載されています (両方については、 TBB のドキュメントを参照してください)。

于 2012-02-01T16:43:03.413 に答える