如何知道CThreadPool何时完成工作?

时间:2009-03-06 07:16:54

标签: c++ multithreading atl

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

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

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

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

波阿斯

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

等待已完成任务的最简洁方法是创建event,然后通过调用WaitForSingleObject等待工作线程完成。