我基本上想要实现的是在工作变得可用时在task_group上安排新的工作项。在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上的新工作或者反复做wait())。
你如何使用微软的ppl做到这一点?
修改 MSDN文档说明多次调用wait()是合法的: http://msdn.microsoft.com/en-us/library/dd470481.aspx “在task_group对象上调用wait会将其重置为可以重用的干净状态。这包括取消task_group对象的情况。”
如果可以采取另一种方法,只剩下剩下的东西
答案 0 :(得分:0)
我的解决方案毕竟是使用由CurrentScheduler :: ScheduleTask()创建的专用任务,我不时调用task_group.wait(),以便清理累积的并发调度程序资源。
当应用程序想要退出时,我必须发信号通知此任务它必须自己结束(为了清理得很好)