【发布时间】:2023-03-15 05:29:01
【问题描述】:
我想要完成的是在任务组上安排新的工作项,因为工作变得可用。在 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() (不知道在调用 wait() 一次之后在 task_group 上安排新工作是否合法或重复等待())。
你会如何使用微软的 ppl 来做到这一点?
编辑 MSDN 文档指出多次调用 wait() 是合法的: http://msdn.microsoft.com/en-us/library/dd470481.aspx “对 task_group 对象调用 wait 会将其重置为可以重复使用的干净状态。这包括取消 task_group 对象的情况。”
唯一剩下的就是如果可以采取另一种方法
【问题讨论】:
标签: c++ visual-studio concurrency c++11 ppl