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类
- push 接口,保存调用回调方法所需的ptr
- call 接口
- ready 接口
Subscription类(核心类)
- addCallback方法
- handleMessage方法
内部结构体,CallbackInfo(这是个比较重要的结构体)
版权声明:本文为chen_0306原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。