等待线程
Waiting for threads
我使用CreateThread()为我的4个线程。
我想同时运行我所有的线程,但是在继续主线程之前等待所有4个线程完成。
我使用int并在线程开始时增加它,然后在结束时减少它,然后在我的主线程中,我使用while循环来保持,而数字超过一定值…然而,这似乎不能正常工作。
这可能吗?
在所有线程句柄上使用WaitForMultipleObjects
和bWaitAll
标志集。该函数将在所有线程退出后返回。
您可以使用有信号状态机制和WaitForMultipleObjects函数来等待事件或线程本身(由它们的句柄指向)达到有信号状态。
通过简单地在这些线程之间共享单个变量,您可能会遇到同步问题,特别是当它们分布在CPU的多个核心中时。
如果你想在不使用同步机制的情况下自动修改共享值,可以使用像interlockincrement这样的"Interlocked*"函数,尽管这并不能完全保证不会出现问题。无论如何,不要将该方法用作同步机制。
您可能想要做的是创建四个线程,然后按顺序在返回的四个句柄上调用WaitForSingleObject
。只要确保这四个线程通过调用ExitThread
退出即可。
或者,正如Hasturkun的回答所指出的那样,使用WaitForMultipleObjects
…这将是明智之举。: -)
如果您希望主线程等待所有子线程完成它们的工作,那么你可以使用:
<罢工> pthread_join 罢工>
编辑:啊,这是windows平台(我之前没有注意到),所以你需要使用,
WaitForMultipleObjects
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 提升 ASIO - io_service 不要等待连接到线程
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- 一个线程等待多个线程事件
- 如何让线程等待对象完全破坏?(对象也有一个线程)?
- 停止C++ 11 个 std::线程等待 std::condition_variable
- C++线程:等待condition_variable后无法解锁阵列中的互斥锁
- Qt 线程等待来自 GUI 的输入
- C++11线程等待
- 如何让线程等待对象的销毁
- Boost:等待工作线程等待条件变量
- C++11线程等待行为:std::this_Thread::yield()与std::this _Thread::sle
- 如何使线程等待而不轮询
- 使其中一个线程等待的时间尽可能少(几乎为零)
- 当线程等待互斥锁时捕获的信号
- Qt:如何让一个线程等待临时包障,并暂时增加另一个线程的优先级以删除 roadbock?
- C++ Windows MFC 并发:让线程等待,直到达到特定状态
- 线程等待父线程
- 使用异步方法vs线程等待
- c++线程等待时间