gpt4 book ai didi

C++ 等待多线程

转载 作者:搜寻专家 更新时间:2023-10-31 02:10:46 26 4
gpt4 key购买 nike

对于我的线程问题,我似乎找不到确切的答案。我目前有一个程序可以使用 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);

最佳答案

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

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

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

这是我在 google 上找到的一张图片,显示了 thread::join() 的工作原理。

关于C++ 等待多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44760069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com