バージョン 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 のドキュメントを参照してください)。