2009-03-06 85 views
1

我最近發現ATL的CThreadPool類,對這個發現非常滿意。這是一個整潔的小類,它將關注具有多個工作線程的同步語義來處理某些taks隊列。通過一些外部過程將任務提供給CThreadPool對象。如何知道CThreadPool何時完成工作?

雖然是很整齊的乾淨,似乎沒有成爲一個辦法找出是否所有任務都catually已經完成。什麼是最好的方式來做到這一點?

例如,假設我需要做10個繁重的計算任務,然後繼續做其他事情。直到我知道任務已完成,我才能繼續前進。

所以我創建10個線程一個CThreadPool,把任務隊列和關閉他們去線程。我如何知道任務何時完成?

波阿斯

回答

1

我認爲你需要讓你的工人對象的Execute()方法使用某種形式的IPC的是「主」線程可以監視。類似於Execute()方法在主線程可以等待的信號量上調用ReleaseSemaphore(),並計算等待完成的次數。或者線程池工作人員可以發佈一條消息,指出他們已經完成了一個工作項目,以便主線程從中獲取消息。