2011-09-20 190 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 ...这将是聪明的。 :-)