当前位置: 首页 > news >正文

Fast DDS之Subscriber

目录

  • Subscriber
    • SubscriberQos
    • SubscriberListener
    • 创建Subscriber
  • DataReader
  • SampleInfo
  • 读取数据

在这里插入图片描述
Subscriber扮演容器的角色,里面可以有很多DataReaders,它们使用Subscriber的同一份SubscriberQos配置。Subscriber可以承载不同Topic和数据类型的DataReader对象。

Subscriber

SubscriberQos

默认Qos配置可以通过DomainParticipant实例的get_default_subscriber_qos()函数获取。

SubscriberListener

Subscriber的状态改变会触发SubscriberListener的回调函数调用。用户可以通过继承实现自定义回调。新增callback:on_data_on_readers()

创建Subscriber

通过DomainParticipant的create_subscriber()函数创建,SubscriberQos参数是必需的,SubscriberListener和StatusMask参数可选。

// 创建DomainParticipant实例participant
Subscriber* subscriber_with_default_qos = participant->create_subscriber(SUBSCRIBER_QOS_DEFAULT);
if (nullptr == subscriber_with_default_qos) {// Errorreturn;
}

基于Profile创建Subscriber:用于标识subscriber的字符串名字参数是必需的,listener和StatusMask是可选的

Subscriber* subscriber_with_profile = participant->create_subscriber_with_profile("subscriber_profile");
if (nullptr == subscriber_with_profile) {// Errorreturn;
}

删除Subscriber:需要先删除Subscriber中的所有实体(DataReaders),再调用 delete_subscriber() 删除Subscriber

// Delete the entities the subscriber created
if (subscriber->delete_contained_entities() != ReturnCode_t::RETCODE_OK) {// Subscriber failed to delete the entities it createdreturn;
}
// Delete the Subscriber
if (participant->delete_subscriber(subscriber) != ReturnCode_t::RETCODE_OK) {// Errorreturn;
}

DataReader

DataReader只归属于创建它的Subscriber,每个DataReader在它创建支持绑定到单一的Topic上,所以Topic必须是在DataReader创建之前就已经创建。可以通过DataReader::read_next_sample()或DataReader::take_next_sample()函数获取pub端写入的数据。
DataReaderQos
DataReaderListener用于监听DataReader状态的改变。有以下callback成员函数:

  • on_data_available
  • on_subscription_matched
    创建一个DataReader:绑定到要传输数据的Topic和DataReaderQos是必需的参数,DataReaderListener和StatusMask是可选的
DataReader* data_reader_with_default_qos = subscriber->create_datareader(topic, DATAREADER_QOS_DEFAULT);
if (nullptr == data_reader_with_default_qos) {// Errorreturn;
}

基于Profile创建DataReader
使用自定义的PayloadPool创建DataReader(为什么要使用自定义的PayloadPool?)

// A DataReaderQos must be provided to the creation method
DataReaderQos qos;// Create PayloadPool
std::shared_ptr<CustomPayloadPool> payload_pool = std::make_shared<CustomPayloadPool>();
DataReader* data_reader = subscriber->create_datareader(topic, qos, nullptr, StatusMask::all(), payload_pool);
if (nullptr == data_reader) {// Errorreturn;
}

删除DataReader
同理,删除DataReader之前需要删除所有属于DataReader的实体(QueryConditions)

// Delete the entities the DataReader created
if (data_reader->delete_contained_entities() != ReturnCode_t::RETCODE_OK) {// DataReader failed to delete the entities it created.return;
}// Delete the DataReader
if (subscriber->delete_datareader(data_reader) != ReturnCode_t::RETCODE_OK) {// Errorreturn;
}

SampleInfo

读取数据

相关文章:

Fast DDS之Subscriber

目录 SubscriberSubscriberQosSubscriberListener创建Subscriber DataReaderSampleInfo读取数据 Subscriber扮演容器的角色&#xff0c;里面可以有很多DataReaders&#xff0c;它们使用Subscriber的同一份SubscriberQos配置。Subscriber可以承载不同Topic和数据类型的DataReade…...

测试PySpark

文章最前&#xff1a; 我是Octopus&#xff0c;这个名字来源于我的中文名--章鱼&#xff1b;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github &#xff1b;这博客是记录我学习的点点滴滴&#xff0c;如果您对 Python、Java、AI、算法有兴趣&#xff0c;可以关注我的…...

C语言- 原子操作

基本概念 在C语言(尤其是C11标准之后)中,原子操作提供了一种机制,使得程序员可以在并发环境中,不使用互斥或其他同步原语,而直接对数据进行操作,同时确保数据的完整性和一致性。 原子变量和原子操作的核心思想是:无论什么时候,只有一个线程能够看到变量的修改操作。…...

设置hadoop+安装java环境

上一篇 http://t.csdnimg.cn/K3MFS 基本操作 接着上一篇 先导入之前导出的虚拟机 选择导出到对应的文件夹中 这里修改一下保存虚拟机的位置&#xff08;当然你默认也可以&#xff09; 改一个名字 新建一个share文件夹用来存放共享软件的文件夹 在虚拟机的设置中找到这个设置…...

阿里云新加坡主机服务器选择

阿里云新加坡主机有哪些选择&#xff1f;可以选择云服务器ECS或轻量应用服务器&#xff0c;都有新加坡地域可以选择&#xff0c;东南亚地区可以选择新加坡、韩国首尔、日本东京等地域&#xff0c;阿里云新加坡主机测试IP地址&#xff1a;161.117.118.93 可以测试下本地到新加坡…...

21天打卡掌握java基础操作

Java安装环境变量配置-day1 参考&#xff1a; https://www.runoob.com/w3cnote/windows10-java-setup.html 生成class文件 java21天打卡-day2 输入和输出 题目&#xff1a;设计一个程序&#xff0c;输入上次考试成绩&#xff08;int&#xff09;和本次考试成绩&#xff0…...

SQL题目记录

1.商品推荐题目 1.思路&#xff1a; 通过取差集 得出要推荐的商品差集的选取&#xff1a;except直接取差集 或者a left join b on where b null 2.知识点 1.except selectfriendship_info.user1_id as user_id,sku_id fromfriendship_infojoin favor_info on friendship_in…...

Linux程序调试器——gdb的使用

gdb的概述 GDB 全称“GNU symbolic debugger”&#xff0c;从名称上不难看出&#xff0c;它诞生于 GNU 计划&#xff08;同时诞生的还有 GCC、Emacs 等&#xff09;&#xff0c;是 Linux 下常用的程序调试器。发展至今&#xff0c;GDB 已经迭代了诸多个版本&#xff0c;当下的…...

前端打包项目上线-nginx

第一步&#xff1a;下载nginx。 直接下载 nginx/Windows-1.25.2 pgp 第二步&#xff1a;解压zip包 第三步&#xff1a;打开文件夹&#xff0c;把http里的路径打开cmd 第四步&#xff1a;打开你的http-server服务&#xff0c;没有下载去下一次就ok了 打开后就可以访问了 第五步…...

创龙瑞芯微RK3568参数修改(调试口波特率和rootfs文件)

前言 前面写了基本的文件编译、系统编译和系统烧写&#xff0c;差不多前期工作就准备的差不多了。目前的东西能解决大部分入门级的需求。当然如果需要开发的话&#xff0c;还需要修改其他东西&#xff0c;下面一步一步的给小伙伴介绍关键参数怎么修改。 给定波特率 拿到开发板…...

VMware——VMware17安装WindowServer2012R2环境(图解版)

目录 一、WindowServer2012R2镜像百度云下载二、安装 一、WindowServer2012R2镜像百度云下载 下载链接&#xff1a;https://pan.baidu.com/s/1TWnSRJTk0ruGNn4YinzIgA 提取码&#xff1a;e7u0 二、安装 打开虚拟机&#xff0c;点击【创建新的虚拟机】&#xff0c;如下图&…...

ModuleNotFoundError: No module named ‘torch‘

目录 情况1,真的没有安装pytorch情况2(安装了与CUDA不对应的pytorch版本导致无法识别出torch) 情况1,真的没有安装pytorch 虚拟环境里面真的是没有torch,这种情况就easy job了,点击此链接直接安装与CUDA对应的pytorch版本,CTRLF直接搜索对应CUDA版本即可查找到对应的命令.按图…...

采用Spring Boot框架开发的医院预约挂号系统3e3g0+vue+java

本医院预约挂号系统有管理员&#xff0c;医生和用户。管理员功能有个人中心&#xff0c;用户管理&#xff0c;医生管理&#xff0c;科室信息管理&#xff0c;预约挂号管理&#xff0c;用户投诉管理&#xff0c;投诉处理管理&#xff0c;通知公告管理&#xff0c;科室分类管理。…...

Jmeter性能测试(压力测试)

1.先保存 2.添加请求&#xff08;即添加一个线程组&#xff09; 3.添加取样器&#xff08;在线程组下面添加一个http请求&#xff09; 场景1&#xff1a;模拟半小时之内1000个用户访问服务器资源&#xff0c;要求平均响应时间在3000毫秒内&#xff0c;且错误率为0&#xff0…...

NetCore/Net8下使用Redis的分布式锁实现秒杀功能

目的 本文主要是使用NetCore/Net8加上Redis来实现一个简单的秒杀功能&#xff0c;学习Redis的分布式锁功能。 准备工作 1.Visual Studio 2022开发工具 2.Redis集群&#xff08;6个Redis实例&#xff0c;3主3从&#xff09;或者单个Redis实例也可以。 实现思路 1.秒杀开始…...

openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库连接数

文章目录 openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库连接数102.1 背景信息102.2 操作步骤 openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库连接数 102.1 背景信息 当用户连接数达到上限后&#…...

lspci源码

lspci 显示Linux系统的pci设备最简单的方法就是使用lspci命令&#xff0c;前提是要安装pciutils包&#xff08;centos在最小化安装时不会自带该包&#xff0c;需要自己下载安装&#xff09; pciutils包的源码github地址为&#xff1a; https://github.com/pciutils/pciutils …...

CMake教程-第 8 步:添加自定义命令和生成文件

CMake教程-第 8 步&#xff1a;添加自定义命令和生成文件 1 CMake教程介绍2 学习步骤Step 1: A Basic Starting PointStep 2: Adding a LibraryStep 3: Adding Usage Requirements for a LibraryStep 4: Adding Generator ExpressionsStep 5: Installing and TestingStep 6: Ad…...

快速入门:Spring Cache

目录 一:Spring Cache简介 二:Spring Cache常用注解 2.1:EnableCaching 2.2: Cacheable 2.3:CachePut 2.4:CacheEvict 三:Spring Cache案例 3.1:先在pom.xml中引入两个依赖 3.2:案例 3.2.1:构建数据库表 3.2.2:构建User类 3.2.3:构建Controller mapper层代码 3.…...

探索音频传输系统:数字声音的无限可能 | 百能云芯

音频传输系统是一项关键的技术&#xff0c;已经在数字时代的各个领域中广泛应用&#xff0c;从音乐流媒体到电话通信&#xff0c;再到多媒体制作。本文将深入探讨音频传输系统的定义、工作原理以及在现代生活中的各种应用&#xff0c;以帮助您更好地了解这一重要技术。 音频传输…...

AI 时代做自媒体,他从方法论上就赢了绝大部分人

AI 时代做自媒体,他从方法论上就赢了绝大部分人 昨天刷到卡兹克的一篇文章,他分享了自己做内容三年总结的 10 条方法论。 看完之后我的感受是:这哥们从方法论上就赢了。 简单介绍一下卡兹克。他的公众号「数字生命卡兹克」是 AIGC 领域的头部 IP,新榜 AI 行业公众号排名…...

忍者像素绘卷参数详解:CFG值对‘火之意志’风格权重响应敏感度测试

忍者像素绘卷参数详解&#xff1a;CFG值对火之意志风格权重响应敏感度测试 1. 引言&#xff1a;像素艺术与AI的完美融合 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工具&#xff0c;它将传统忍者文化与16-Bit复古游戏美学相结合&#xff0c;创造出独特的视觉体验…...

人事档案整理系统开发记录

档案整理系统开发记录 本篇文章&#xff0c;用于记录我个人开发档案整理工具的所有问题。 说明&#xff1a;开发该工具适用于人事档案处理工具&#xff0c;适用于档案处理&#xff0c;帮助档案整理人员更轻松的移交。 我会一步一步记录&#xff0c;整个软件开的所有的问题&…...

SEO 和网站推广有什么区别_如何判断一个网站的 SEO 质量

SEO 和网站推广有什么区别 在数字营销的广阔天地中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;和网站推广是两个常被提及的概念。它们虽然都旨在提升网站的流量和知名度&#xff0c;但实际上&#xff0c;它们之间有着显著的区别。理解这两者的异同&#xff0c;对于有…...

电力系统稳定器与静态无功补偿器联合提升暂态稳定性Simulink仿真模型研究

使用电力系统稳定器&#xff08;PSS&#xff09;和静态无功补偿器&#xff08;SVC&#xff09;提高暂态稳定性的simulink仿真模型电力系统这玩意儿最怕的就是突然来个大扰动&#xff0c;比如短路故障或者大负荷切换。这时候发电机的功角曲线要是收不住&#xff0c;分分钟全网停…...

2026 codex 大模型 api 配置指南:auth.json、config.toml 与 401/超时排查

当 codex --version 已经能正常输出&#xff0c;很多人会以为接下来只剩下提问和改代码。但真正决定 Codex 能不能顺利进入项目的&#xff0c;往往是 codex 大模型 api 有没有按要求接好&#xff1a;只要 auth.json、config.toml 或网关地址有一点偏差&#xff0c;就可能马上碰…...

独立站建站成本全解析

独立站建站费用构成独立站的费用主要分为域名注册、主机托管、网站建设、支付接口、营销推广和日常维护等几个部分。每个部分的费用因需求不同而有较大差异。域名注册费用通常在每年10至100美元之间&#xff0c;取决于域名后缀和注册商。常见的.com域名价格在10至20美元/年&…...

TM1620驱动数码管的8个常见坑点及解决方案(基于STM32实战)

TM1620驱动数码管的8个常见坑点及解决方案&#xff08;基于STM32实战&#xff09; 当你在STM32项目中使用TM1620驱动数码管时&#xff0c;可能会遇到各种令人头疼的问题。本文将深入探讨8个最常见的坑点&#xff0c;并提供经过实战验证的解决方案&#xff0c;帮助开发者快速定位…...

OpenClaw怎么部署?阿里云一键部署,轻松养龙虾!

还在羡慕别人的AI助手能写代码、查资料、干杂活&#xff1f;现在&#xff0c;通过阿里云OpenClaw快速部署方案&#xff0c;官方镜像一键部署&#xff0c;无需代码、只需两步&#xff0c;新手小白也能轻松“养龙虾”&#xff01; 一、OpenClaw是什么&#xff1f;为什么叫“养龙虾…...

RTX 3090上跑Isaac Lab强化学习:从克隆仓库到训练蚂蚁机器人保姆级避坑指南

RTX 3090上的Isaac Lab强化学习实战&#xff1a;从零训练蚂蚁机器人的完整指南 在机器人强化学习领域&#xff0c;NVIDIA Isaac Lab正迅速成为研究者和开发者的首选工具链。当RTX 3090的24GB显存遇上Ubuntu 22.04的稳定环境&#xff0c;这套组合能为复杂RL任务提供令人惊喜的训…...