我正在为我的4个帖子使用CreateThread()
我想同时运行我的所有线程,但是在继续主线程之前等待所有4个线程完成。
我使用了一个int并在线程的开头增加了它,然后在结束时减少了它,然后在我的主线程中我使用了while循环来保持数字超过某个值...但是这似乎没有正常工作。
这可能吗?
答案 0 :(得分:7)
在所有线程句柄上使用WaitForMultipleObjects
并设置bWaitAll
标志。一旦所有线程退出,该函数将返回。
答案 1 :(得分:1)
您可以使用signaled states和WaitForMultipleObjects函数的机制等待事件或线程本身(由其句柄指向)达到信号状态。
通过简单地在这些线程中共享单个变量,您可能会遇到同步问题,尤其是当它们分布在CPU的核心中时。
如果要在不使用同步机制的情况下原子地修改共享值,请使用InterlockedIncrement之类的“Interlocked *”函数,尽管这并不能完全保证不会出现问题。不管怎样,不要将该方法用作同步机制。
答案 2 :(得分:0)
如果您希望主线程等到所有子线程完成其工作,那么 您可以使用:
<击>的 pthread_join 强> 撞击>
编辑:
啊,它是Windows平台(之前我没有注意到),所以你需要使用,
<强> WaitForMultipleObjects 强>
答案 3 :(得分:0)
您可能想要做的是创建四个线程,然后按顺序在返回的四个句柄上调用WaitForSingleObject
。只需通过调用ExitThread
确保四个线程退出。
编辑:
或者,正如Hasturkun的回答所指出的,使用WaitForMultipleObjects
......这很聪明。 : - )