spinner类start接口分析

     start接口:使用 boost::thread_group 类create_thread 接口 创建线程池, 创建多少个县城根据AsyncSpinner构造参数来就决定,如果构造参数 thread_count == 0,那么创建和处理器数量一样的线程个数。

List item

     线程方法内部的逻辑
       if(thread_count == 1)
              调用callavaliable(timeout)方法
         else 
             调用callone(timeout)
  • List item

     首先要认识到CallbackInterface接口类(接口类,可以被添加到CallbackQueueInterface接口类,主要提供了call和ready接口)
     roscpp 默认实现了一个CallbackQueueInterface(两个接口, addCallback/ removeByID)也就是CallbackQueue
    

目前的roscpp源码一共有三个地方实现了Callbackinterface接口类。

SubscriptionQueue类

第1个 SubscriptionQueue类 (topic回调方法), 当调用call()方法时,
首先使用MessageDeserializer进行消息反序列化deserializer接口 ,然后再调用SubscriptionCallbackHelper的call接口,这样才完成了订阅的回调处理

ServiceCallback类

第二个 Servicecallback 类 (服务回调方法,在service_publication.cpp源文件)

PeerConnDisconnCallback类

第三个 PeerconnDisconnCallback类 (在publication.cpp源文件)

SubscriptionQueue类

  1. push 接口,保存调用回调方法所需的ptr
  2. call 接口
  3. ready 接口

Subscription类(核心类)

  1. addCallback方法
  2. handleMessage方法
    内部结构体,CallbackInfo(这是个比较重要的结构体)

版权声明:本文为chen_0306原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。