用户您好,请详细描述您所遇到的问题,详细的描述有助于帮助我们快速定位,解决问题~Thanks♪(・ω・)ノ
1. 硬件获取渠道及型号: TROS-SDK-1.7.5
2. 系统镜像版本: tros_img.tgz
3. 问题模块: 【communicaton模块】
4. 问题描述: 通信插件中,DataReader 对象的 AddListener(const DataReaderCallback &callback) 和 AddListenTopic(const std::string& topic) 分别用来设置回调函数和topic,如果一个APP中,如果订阅多个topic,并且其对应的回调函数是不同的,如何将topic跟回调函数一对一关联起来呢?
如下面例子中,订阅 "pubtopic1" 时,subscriber1 创建时传入的回调函数并不会生效(AddListener(const DataReaderCallback &callback) 不会被调用, 原因是创建Reader时,发现已经创建过Reader,所以不再创建),而AddListenTopic(const std::string& topic) 会调被用)。所以在一个进程中,不能设置多个回调函数吗?
5. 示例代码:
CommAttr comm_attr;
comm_attr.participant_attrs_.push_back(ParticipantAttr{12});
comm_attr.e2e_callback = SubE2EventCallback;
// 订阅 topic
std::string topic = "topic";
std::shared_ptrSubscriberReqSerializer>> subscriber;
subscriber = SubscriberReqSerializer>::New(comm_attr, topic, 0, SimpleImageSubCallback, PROTOCOL_KSOMEIP_SUBSCRIBER);
if (!subscriber) {
COHLOGE(" create subscriber failed");
return -1;
}
// 订阅 "pubtopic1" ,subscriber1 创建时传入的回调函数并不会生效(AddListener(const DataReaderCallback &callback) 不会被调用, 原因是创建Reader时,发现已经创建过Reader,所以不再创建),而AddListenTopic(const std::string& topic) 会调被用)。所以在一个进程中,不能设置多个回调函数吗?
std::string pubtopic1 = "pubtopic1";
std::shared_ptrSubscriberReqSerializer>> subscriber1;
subscriber1 = SubscriberReqSerializer>::New(comm_attr, pubtopic1, 0, SimpleImageSubCallback1, PROTOCOL_KSOMEIP_SUBSCRIBER);
if (!subscriber) {
COHLOGE(" create subscriber 1 failed");
return -1;
}
6. log文件(目前暂不支持附件上传,请通过百度网盘上传后贴链接):

