小编neb*_*ant的帖子

ROS AsyncSpinner的多线程行为

我试图理解ROS中的AsyncSpinner是如何工作的,因为我可能会有一些误解.你可以在这里找到类似的问题.

如此处所示,其定义提到:

异步微调器:生成几个线程(可配置),它们将并行执行回调,而不会阻塞调用它的线程.启动/停止方法允许控制何时开始处理回调以及何时停止回调.

而官方的文档中这里的AsyncSpinning也说作为一种多线程纺纱.

所以说,我有一个非常简单的例子,发布者和订阅者使用AsyncSpinner来测试多线程行为.

#include "ros/ros.h"
#include "std_msgs/String.h"

int main(int argc, char **argv)
{
  ros::init(argc, argv, "publisher");
  ros::NodeHandle nh;

  ros::Publisher chatter_pub = nh.advertise<std_msgs::String>("chatter", 1000);

  ros::Rate loop_rate(10);
  while (ros::ok())
  {
    std_msgs::String msg;
    msg.data = "hello world";

    chatter_pub.publish(msg);

    ros::spinOnce();

    loop_rate.sleep();
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

以及定义和使用微调器的订户:

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <boost/thread.hpp>

int count = 0;

void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
  count++;
  ROS_INFO("Subscriber %i callback: I heard %s", count, msg->data.c_str());
  sleep(1);
}

int main(int argc, …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading callback ros

4
推荐指数
1
解决办法
5315
查看次数

标签 统计

c++ ×1

callback ×1

multithreading ×1

ros ×1