我似乎找不到一个准确的答案来回答我的线程问题。我目前有一个使用OpenNI2轮询Kinect V2传感器获取新帧数据的程序。问题是,我需要分别轮询每种类型的传感器; 深度,IR和RGB,以便同时获取它们。这就是我的线程问题所在。我想在它们各自的单独线程中轮询这三个传感器,并在所有函数调用返回后继续数据处理。
我知道如何将每个新线程链接到主线程,以确保所有线程在程序退出之前完成,但是如何在程序运行中等待特定一组线程完成呢?在C ++ 11的std :: thread中是否有我忽略的函数或功能,还是需要手动使用互斥锁或信号量来完成?
伪代码:
我知道如何将每个新线程链接到主线程,以确保所有线程在程序退出之前完成,但是如何在程序运行中等待特定一组线程完成呢?在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);
join()
。 - Edgar Rokjānjoin
函数等待线程完成。一旦join
函数返回,线程就真正地完成了,它的“主”函数已经返回,std::thread
对象可以安全地析构。请参见例如此std::thread
参考资料获取更多信息。 - Some programmer dude