1

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

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

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

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

波阿斯

4

2 回答 2

1

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

于 2009-09-05T21:03:21.873 回答
1

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

于 2009-03-06T15:10:21.813 回答