我现在正在编写一个ros程序并尝试在ROS节点中启动一个线程,
在main函数中,我使用了一个线程
std::thread my_process{process};
奇怪的是,如果我在一开始就添加一个ROS_WARN或一个cout,一切正常,如果我评论该行,就找不到其他输出(既不是cout也不是cv :: imshow)。
我不确定导致这个问题的原因是,流程是完全移到后台还是没有被执行?有人可以帮忙吗?
我的代码看起来像这样
void process() {
while (true) {
if (raw_image_buf.empty() || depth_image_buf.empty()) {
ROS_WARN("Loop skipped");
// std::cout << "\nLOOP SKIPPED\n";
} else {
ROS_WARN("Thread loop");
cv::Mat raw_img, depth_img;
ri_buf.lock();
if (!raw_image_buf.empty()) {
raw_img = raw_image_buf.front().first;
rawstamp = raw_image_buf.front().second;
cv::imshow("raw", raw_img);
raw_image_buf.pop();
}
ri_buf.unlock();
di_buf.lock();
if (!depth_image_buf.empty()) {
depth_img = depth_image_buf.front().first;
depthstamp = depth_image_buf.front().second;
cv::imshow("depth", depth_img);
depth_image_buf.pop();
}
di_buf.unlock();
}
}
}
int main(int argc, char **argv) {
ros::init(argc,argv, "mynode");
ros::NodeHandle n("~");
ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME,
ros::console::levels::Info);
ros::Subscriber sub_raw_img = n.subscribe("image_raw", 100,
raw_img_callback);
ros::Subscriber sub_depth_img = n.subscribe("image_depth", 100,
depth_img_callback);
std::thread estimation_process{process};
ros::spin();
return 0;
}