问题场景:
遇到这个报错的原因是我开了两个线程,分别订阅话题,使用两个ros::spin(),然后就报了这个错误
解决办法:
使用ros::MultiThreadedSpinner
使用方法:
ros::MultiThreadedSpinner spinner(4); // Use 4 threads
spinner.spin(0); // spin() will not return until the node has been shutdown
模板示例:
// ros基础头文件
#include <ros/ros.h>
// C++线程头文件
#include <thread>
#include <unistd.h>
ros::MultiThreadedSpinner spinner(2); // 这个2是根据下面的线程个数定的
void subscribeThread1() {
ros::NodeHandle nh;
ros::Subscriber goal_sub = nh.subscribe("/subscribe_goal", 10, GoalCallback);
ROS_INFO("Subscribe /subscribe_goal successfully!");
spinner.spin(0); // 这个可以一直写0,0的话就是根据当前主机的线程数自己决定
}
void subscribeThread2() {
ros::NodeHandle nh;
ros::Subscriber phone_send_sub = nh.subscribe("/phone_send", 10, PhoneSendCallback);
spinner.spin(0); // 这个可以一直写0,0的话就是根据当前主机的线程数自己决定
}
int main(int argc, char** argv){
ros::init(argc, argv, "node");
// 创建两个订阅线程
std::thread subscribeThreadObj1(subscribeThread1);
std::thread subscribeThreadObj2(subscribeThread2);
// 等待线程完成
subscribeThreadObj1.join();
subscribeThreadObj2.join();
return 0;
}