ros2里面的这个spin()函数我觉的(我没有去看源代码,只是个人固执的这么认为)可以替换为如下内容:
while(rclcpp::ok())
{
if(timer_->call())
{
timer_->execute_callback();
}
}
这样写有一个好处,那就是不用使用智能指针了shared_ptr
//假设前面内容是:
using namespace rclcpp;
Node * pnode=0;
rclcpp::TimerBae::SharedPtr timer_;
int main(int argc,char ** argv)
{
Node node1("nodeName");
pnode=&node1;
}
//这个时候可以不用转换pnode为智能指针可以直接在pnode=&node1后面添加内容
while(ok())
{
if(timer_->call())
{
timer_->execute_callback();
}
}
否者你就要这样写:
int main(int argc,char ** argv)
{
Node node1("nodeName");
pnode=&node1;
//转换普通指针为共享指针
shared_ptr p(pnode);
spin(p);
}
虽然说后面这个看起来反而简洁一点,但是第一种结构我们更加熟悉,而且看起来思路非常的清晰,而且好像还可以在里面设定各种条件,控制流程执行,所以说这个是很值得参考的