То, что я хочу в основном выполнить, - это запланировать в группе задач новые рабочие элементы, когда работа станет доступной. В task_group метод run () вызывается в сценарии продюсера-производителя, так что в любой момент времени, когда требуется работа, его планируется запустить в task_group
Concurrency::task_group taskGroup;
tempalte <typename Functor>
void queue_work(Functor& fn)
{
taskGroup.run([&fn](){
fn();
});
}
task_group требует (перед выходом из приложения) вызова метода wait () для освобождения ресурсов. Я использую task_group, потому что мне также нужна поддержка отмены, но необходимость вызова wait () усложняет дизайн. Практически кажется, что мне нужно будет использовать дополнительный поток, из которого время от времени вызывать wait () для группы задач (даже не знаю, законно ли планировать новую работу над task_group после однократного вызова wait () или подождать () несколько раз).
Как бы вы сделали это, используя ppl от Microsoft?
EDIT
Документация MSDN гласит, что законно вызывать wait () несколько раз:
http://msdn.microsoft.com/en-us/library/dd470481.aspx
«Вызов wait для объекта task_group сбрасывает его в чистое состояние, где его можно использовать повторно. Это включает в себя случай, когда объект task_group был отменен.»
Единственное, что осталось бы, было бы, если бы можно было пойти другим путем