C++等待多线程

问题描述:

我似乎无法找到我有的线程问题的确切答案。我目前有一个程序可以使用OpenNI2轮询Kinect V2传感器以获取新帧数据。问题是我需要轮询每种类型的传感器;深度,红外和RGB分别为了获得他们在同一时间。这里是我的线程问题出现的地方,我想在他们自己的单独线程中轮询三个传感器中的每一个,并在所有函数调用返回时继续进行数据处理。C++等待多线程

我知道如何将每个新线程链接到主线程以确保所有线程在程序退出前完成,但是如何在程序中间等待一组特定的线程完成?在C++ 11中有没有std :: thread的函数或功能,我忽略了这个,还是需要使用互斥或​​信号手动完成的东西?

伪代码:

std::thread thread_RGB(Kinect::readFrame(Enum::RGB), kinect_1); 
std::thread thread_IR(Kinect::readFrame(Enum::IR), kinect_1); 
std::thread thread_depth(Kinect::readFrame(Enum::depth), kinect_1); 

// Wait for all threads to finish getting new frame data 
... 

// Process data here 
process_data(kinect_1.RGB_data); 
process_data(kinect_1.IR_data); 
process_data(kinect_1.depth_data); 
+1

因此调用所有线程的'join()'。 –

+0

对,但是,一旦线程加入,我如何判断它们是否全部完成执行?不加入只是确保主线程不会退出,直到每个线程完成。我不确定如何实现的部分是等待它们在代码中间完成。 – Wired365

+0

'thread_RGB.join(); thread_IR.join(); thread_depth.join(); '或将线程存储在容器中并在容器上的循环中调用join()。 –

需要调用.join方法来等待线程完成,然后销毁它们。当您致电t.join()时,会检查线程是否仍在执行某些操作,如果工作已完成,则会加入线程。如果线程不可连接(也有t.joinable()),则主线程将等待第二个线程完成其工作,然后加入它。

在你的情况下,你可以添加这些行。

thread_RGB.join(); 
thread_IR.join(); 
thread_depth.join(); 

这是我在google上找到的图片,显示thread::join()是如何工作的。