2011-09-20 241 views
2

我爲我的4個線程使用CreateThread()。
我想同時運行所有線程,但在繼續執行主線程之前,請等待所有4個線程完成。



我使用了一個int,並在線程的開始處增加了它,然後在最後減少了它,然後在我的主線程中,我使用了一個while循環來保持數字超過某個值。似乎無法正常工作。

這可能嗎?等待線程

回答

1

您可以使用signaled statesWaitForMultipleObjects函數的機制等待事件或線程本身(由它們的句柄指向)到達已發信號狀態。

通過在這些線程之間簡單地共享單個變量,您可能會遇到同步問題,尤其是當它們分佈在CPU內核中時。

如果要在不使用同步機制的情況下自動修改共享值,請使用「Interlocked *」功能,如InterlockedIncrement,儘管這並不能完全保證不會有問題。不要將該方法用作同步機制。

+0

您不需要事件,線程在Windows中是可等待的對象。 – Hasturkun

+0

是的,我忘了這一點,並相應地修改了答案。 :) – macbirdie

0

如果你想你的主線程等待所有子線程完成自己的工作,然後 您可以使用:

pthread_join

編輯:

啊是windows平臺(我之前沒有注意到),所以你需要使用,

WaitForMultipleObjects

0

你可能想要做的是創建四個線程,然後在返回的四個句柄上按順序調用WaitForSingleObject。只需確保四個線程退出,並致電ExitThread

編輯:

或者,如Hasturkun的答覆中指出,使用WaitForMultipleObjects ...這將是聰明的。 :-)