0

我基本上想要完成的是在 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 上安排新工作是否合法或重复等待())。

你会如何使用微软的 ppl 来做到这一点?

编辑 MSDN 文档指出多次调用 wait() 是合法的:http: //msdn.microsoft.com/en-us/library/dd470481.aspx “在 task_group 对象上调用 wait 会将其重置为可以执行的干净状态被重用。这包括 task_group 对象被取消的情况。

唯一剩下的就是如果可以采取另一种方法

4

1 回答 1

0

我对此的解决方案毕竟是使用由 CurrentScheduler::ScheduleTask() 创建的专用任务,我不时调用 task_group.wait() 以清理累积的并发调度程序资源。

当应用程序想要退出时,我必须向这个任务发出信号,它必须自己结束(以便很好地清理)

于 2012-04-01T12:46:11.193 回答