【问题标题】:How to know when the work is done with CThreadPool?如何知道 CThreadPool 的工作何时完成?
【发布时间】:2010-10-11 16:51:32
【问题描述】:

我最近发现了 ATL 的 CThreadPool 类,并且对这个发现非常满意。这是一个简洁的小类,它将处理让多个工作线程处理一些任务队列的同步语义。这些任务由某个外部进程提供给 CThreadPool 对象。

虽然非常干净整洁,但似乎没有办法查明是否所有任务都已经完成。最好的方法是什么?

例如,假设我需要完成 10 个繁重的计算任务,然后继续做其他事情。在我知道任务已经完成之前,我不能继续前进。

所以我创建了一个有 10 个线程的 CThreadPool,将任务放在队列中,然后它们转到线程。我怎么知道任务何时完成?

博阿斯

【问题讨论】:

    标签: c++ multithreading atl


    【解决方案1】:

    我认为您需要让工作对象的Execute() 方法使用“主”线程可以监控的某种形式的 IPC。类似于在主线程可以等待的信号量上调用Execute() 方法ReleaseSemaphore() 并计算等待完成的次数。或者线程池工作人员可以向主线程从中获取消息的消息队列发布一条消息,表明他们已完成工作项。

    【讨论】:

      【解决方案2】:

      等待完成任务的最干净的方法是创建一个event,然后通过调用WaitForSingleObject 等待工作线程完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-13
        • 2016-04-21
        • 2019-07-05
        • 2018-01-16
        • 1970-01-01
        • 2014-03-27
        • 1970-01-01
        相关资源
        最近更新 更多