回调函数作用:
提供了异步编程的能力,使得代码更加模块化,易于理解和维护,比如网络请求、文件读写等。
回调函数原理:
函数2以函数指针的形式,作为参数传递给函数1,在函数1中的某个时机调用函数2。
以ros2的消息接收为例:
1. 在Prediction节点中创建了subsciption线程用来异步接收Perception的消息
2. std::bind将Prediction::Perception函数作为参数传递给create_subscription(),其中this表示当前对象中的Prediction::Perception()函数。
functions_perception_subscription_ = this->create_subscription<foxglove_msgs::msg::Perception>(
"functions/perception", rclcpp::QoS(rclcpp::KeepLast(10), rmw_qos_profile_sensor_data),
std::bind(&Prediction::Perception, this, std::placeholders::_1), options);
//call back
void Prediction::Perception(const foxglove_msgs::msg::Perception::SharedPtr msg) {
std::lock_guard<std::recursive_mutex> lock(mutex_perception_msg_);
latest_received_perception_.push_back(msg);
if (latest_received_perception_data_.size() > 10) {
latest_received_perception_data_.pop_front();
}
}