Начиная с версии 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 для обоих).