首页 文章

C等待多个线程

提问于
浏览
2

我似乎无法找到我遇到的线程问题的确切答案 . 我目前有一个程序,使用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);

1 回答

  • 2

    您需要调用 .join 方法来等待线程完成然后销毁它们 . 当你调用 t.join() 时,检查线程是否还在做什么,如果工作完成,则线程被连接 . 如果线程不可连接(也有 t.joinable() ),主线程将等待,直到辅助线程完成其工作,然后加入它 .

    在您的情况下,您可以添加这些行 .

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

    这是我在谷歌上发现的图像,显示了 thread::join() 的工作原理 .

相关问题