gpt4 book ai didi

c++ - 使用 Boost 线程监视对象队列

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

我正在尝试为我的应用程序编写一个监控线程,它会定期检查我的对象队列的长度并在事情似乎失控时退出程序。

目前我的主线程运行 2 个线程。相关部分代码如下:

class SolveDGEM {
public:
SolveDGEM();

void processQueue();
void pyramidalFrameQueueConsumer();

private:
// Queues
ConcurrentQueue<Eigen::MatrixXf> q_cam0; ///< Thread-safe and fast queue for cam0.
ConcurrentQueue<ros::Time> q_cam0_time; ///< Thread-safe and fast queue to hold capture timing for cam0.
ConcurrentQueue<cv::Mat> q_cam0_cv; ///< queue to hold cv::Mat for cam0

ConcurrentQueue<Eigen::MatrixXf> q_cam1; ///< Thread-safe and fast queue for cam1.
ConcurrentQueue<ros::Time> q_cam1_time; ///< Thread-safe and fast queue to hold capture timing for cam1.
ConcurrentQueue<cv::Mat> q_cam1_cv; ///< queue to hold cv::Mat for cam0

ConcurrentQueue<Frame> frameQueue;
};

主要.cpp

int main(int, char **) {
SolveDGEM dgem;

boost::thread processQueueThread(&SolveDGEM::processQueue, &dgem);
boost::thread pyramidalFrameConsumerThread(&SolveDGEM::pyramidalFrameQueueConsumer, &dgem);

processQueueThread.join();
pyramidalFrameConsumerThread.join();

return 0;
}

我将队列监控实现为

void SolveDGEM::monitorQueues() {
ros::Rate loopRate(1); // once per second

while (ros::ok()) {
if (pyramidalFrameQueue.size() > 100 || q_cam0.size() > 100) {
ROS_ERROR("Queues seem to be groaning without bounds");

// Code to quit all the other threads

loopRate.sleep();
}
}
}

假设我在另一个 boost 线程中运行此函数,使用此线程退出我的应用程序并安全退出其他 2 个线程的正确方法是什么。

最佳答案

你实际上只是在问如何在线程之间进行通信。

监控线程应该以某种方式向其他线程发出信号(condition_variable 或 Boost 的 thread interruption points 例如)。

其他线程应该完全关闭自己以响应信号。

关于c++ - 使用 Boost 线程监视对象队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34760030/

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