等待线程

时间:2011-09-20 15:37:34

标签: c++ c multithreading winapi

我正在为我的4个帖子使用CreateThread() 我想同时运行我的所有线程,但是在继续主线程之前等待所有4个线程完成。

我使用了一个int并在线程的开头增加了它,然后在结束时减少了它,然后在我的主线程中我使用了while循环来保持数字超过某个值...但是这似乎没有正常工作。

这可能吗?

4 个答案:

答案 0 :(得分:7)

在所有线程句柄上使用WaitForMultipleObjects并设置bWaitAll标志。一旦所有线程退出,该函数将返回。

答案 1 :(得分:1)

您可以使用signaled statesWaitForMultipleObjects函数的机制等待事件或线程本身(由其句柄指向)达到信号状态。

通过简单地在这些线程中共享单个变量,您可能会遇到同步问题,尤其是当它们分布在CPU的核心中时。

如果要在不使用同步机制的情况下原子地修改共享值,请使用InterlockedIncrement之类的“Interlocked *”函数,尽管这并不能完全保证不会出现问题。不管怎样,不要将该方法用作同步机制。

答案 2 :(得分:0)

如果您希望主线程等到所有子线程完成其工作,那么 您可以使用:

<击>的 pthread_join

编辑:

啊,它是Windows平台(之前我没有注意到),所以你需要使用,

<强> WaitForMultipleObjects

答案 3 :(得分:0)

您可能想要做的是创建四个线程,然后按顺序在返回的四个句柄上调用WaitForSingleObject。只需通过调用ExitThread确保四个线程退出。

编辑:

或者,正如Hasturkun的回答所指出的,使用WaitForMultipleObjects ......这很聪明。 : - )