【问题标题】:PPL task_group schedule work and clean accumulated resourcesPPL task_group 安排工作并清理积累的资源
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多