我似乎找不到我的线程问题的确切答案。我目前有一个使用OpenNI2轮询Kinect V2传感器以获取新帧数据的程序。问题是,我需要分别轮询每种类型的传感器;深度、IR和RGB,以便同时获得它们。这就是我的线程问题的用武之地,我想在各自的线程中轮询三个传感器中的每一个,当所有函数调用都返回后,继续进行数据处理。
我知道如何将每个新线程链接到主线程,以确保所有线程在程序退出之前完成,但是我如何在程序中途等待一组特定的线程完成?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);发布于 2017-06-26 22:14:32
您需要调用.join方法来等待线程完成,然后销毁它们。当您调用t.join()时,将检查线程是否仍在执行某些操作,如果工作已完成,则连接线程。如果线程不可连接(也有t.joinable()),主线程将等待辅助线程完成其工作,然后连接它。
在您的示例中,您可以添加这些行。
thread_RGB.join();
thread_IR.join();
thread_depth.join();这是我在谷歌上找到的一张图片,展示了thread::join()是如何工作的。

https://stackoverflow.com/questions/44760069
复制相似问题