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

RTI-DDS代码分析使用介绍

DDS(Data Distribution Service数据分发服务)是对象管理组织OMG的有关分布式实时系统中数据发布的规范。
DDS规范采用了发布/订阅体系结构,但对实时性要求提供更好的支持。DDS是以数据为中心的发布/订阅通信模型。

以下工程基于rti_connext_dds-7.2.0
hello_world.idl定义的HelloWorld结构体如下

在这里插入图片描述

使用RTI Code Generator(rtiddsgen)生成对应工程。

在这里插入图片描述

生成的工程目录如下

在这里插入图片描述

用VS2017打开工程
重点关注 hello_world_publisher.cxx和 hello_world_subscriber.cxx两个文件

Publisher

publisher实现的是发布,subscriber实现的是订阅。
在hello_world_publisher.cxx中

    // 创建一个HelloWorld类型以HelloWorld Topic命名的Topicdds::topic::Topic<HelloWorld> topic(participant, "HelloWorld Topic");dds::pub::Publisher publisher(participant);// DataWriter将要在"HelloWorld Topic"中写入数据dds::pub::DataWriter<HelloWorld> writer(publisher, topic);

定义HelloWorld类型的sample,sample.msg()定义sample输出的内容
通过write函数写入数据

    HelloWorld sample;for (unsigned int count = 0;!shutdown_requested && count < sample_count;count++) {sample.msg("Hello world! " + std::to_string(count));std::cout << "Writing HelloWorld, count " << count << std::endl;writer.write(sample);rti::util::sleep(dds::core::Duration(4));}

Subscriber

类似的,定义Subscriber

    // 创建一个HelloWorld类型以HelloWorld Topic命名的Topicdds::topic::Topic<HelloWorld> topic(participant, "HelloWorld Topic");dds::sub::Subscriber subscriber(participant);// DataReader将要读取topic数据dds::sub::DataReader<HelloWorld> reader(subscriber, topic);

创建状态条件,满足条件才读取数据

    // 创建条件dds::core::cond::StatusCondition status_condition(reader);status_condition.enabled_statuses(dds::core::status::StatusMask::data_available());// 条件触发后关联句柄unsigned int samples_read = 0;status_condition.extensions().handler([&reader, &samples_read]() {samples_read += process_data(reader);});
	dds::core::cond::WaitSet waitset;waitset += status_condition;while (!shutdown_requested && samples_read < sample_count) {// 条件激活std::cout << "HelloWorld subscriber sleeping for 4 sec..."<< std::endl;waitset.dispatch(dds::core::Duration(4));  // Wait up to 4s each time}

相关文章:

RTI-DDS代码分析使用介绍

DDS(Data Distribution Service数据分发服务)是对象管理组织OMG的有关分布式实时系统中数据发布的规范。 DDS规范采用了发布/订阅体系结构&#xff0c;但对实时性要求提供更好的支持。DDS是以数据为中心的发布/订阅通信模型。 以下工程基于rti_connext_dds-7.2.0 hello_world.…...

ant-design-vue 3 a-table保留选中状态

业务需求需要保留选中状态 <a-table class"satistic-table" :row-selection"{ selectedRowKeys: selectedRowKeys, onSelect:onSelect,onSelectAll:onSelectAll }" :row-key"(row)>{ return row.customerId}" :columns"columns"…...

golang 工程组件:grpc-gateway option自定义http规则

option自定义http规则和http body响应 简介 本篇接上文 golang 工程组件&#xff1a;grpc-gateway 环境安装默认网关测试 默认网关配置终究是难用&#xff0c;本篇介绍一下proto里采用option自定义http规则以及让网关返回http响应而不是我们定义的grpc响应 option定义http…...

亚马逊添加购物车和收藏有什么区别

亚马逊的添加购物车和收藏是两个不同的功能&#xff0c;它们在用户行为和用途上有明显的区别&#xff1a; 1、添加购物车&#xff08;Add to Cart&#xff09;&#xff1a; 当用户点击"添加到购物车"按钮时&#xff0c;所选商品将被放入他们的购物车&#xff0c;而…...

JAVA-编程基础-11-03-java IO 字节流

Lison <dreamlison163.com>, v1.0.0, 2023.05.07 JAVA-编程基础-11-03-java IO 字节流 文章目录 JAVA-编程基础-11-03-java IO 字节流字节输出流&#xff08;OutputStream&#xff09;FileOutputStream类**FileOutputStrea 的构造方法**使用文件名创建FileOutputStream…...

python之Cp、Cpk、Pp、Ppk

目录 1、Cp、Cpk、Pp、Ppk 2、python计算 1、Cp、Cpk、Pp、Ppk Cp Process Capability Ratio 可被译为“过程能力指数” Cpk Process Capability K Ratio 可被译为“过程能力K指数” Pp Process Performance Ratio 可被译为“过程绩效指数” Ppk Process Performance K Ra…...

统信uos 1030 企业版 安装.net core环境

安装.net core步骤 添加密钥和包存储库 安装 .NET 之前&#xff0c;请运行以下命令&#xff0c;将 Microsoft 包签名密钥添加到受信任密钥列表&#xff0c;并添加包存储库wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-mic…...

2023/10/23学习记录

1.VS2019中sln对应解决方案 修改sln的文件名&#xff0c;对应的解决方案名称也会变化。 2.如何修改生成的exe文件名呢&#xff1f; 属性--->杂项--->&#xff08;名称) 3.这是任务管理器&#xff0c;这里红色部分显示的是“这是文件描述”。 当通过属性查看详细信息的时…...

flask入门(四)前后端数据传输

文章目录 1、flask后端接收来自前端的数据1&#xff09;如果前端提交的方法为POST2&#xff09;如果前段提交的方法是GET 2、flask后端向前端传数据3、案例参考文献 1、flask后端接收来自前端的数据 1&#xff09;如果前端提交的方法为POST 后端接收时的代码&#xff1a; xx…...

JS——垃圾回收的原理

引言 JavaScript是一种高级的、解释型的编程语言&#xff0c;广泛应用于网页开发和移动应用开发中。在JavaScript中&#xff0c;内存管理是一个重要的话题&#xff0c;而垃圾回收就是内存管理的一部分。本文将介绍JavaScript垃圾回收的原理&#xff0c;并提供一些示例代码来帮助…...

Spring Cloud Gateway 路由构建器的源码分析

Spring Cloud Gateway 路由构建器的源码分析 文章目录 1. 路由构建器的入口2. 创建路由规则3. 设置路由规则和属性4. 路由过滤器的设置5. 构建和获取路由规则&#xff1a;6. 实例化路由构建器&#xff1a;8. 路由构建器的源码分析8.1 RouteLocator接口8.2 RouteLocatorBuilder…...

IT行业哪个方向比较好就业?

IT行业哪个方向比较好就业? IT行业里&#xff0c;哪些方向更好就业&#xff0c;这是一个很常见也很重要的问题。不同的IT方向有不同的技能要求、就业前景和发展空间&#xff0c;因此需要根据自己的兴趣、能力和目标来选择合适的方向。 软件开发与工程&#xff1a;软件开发是…...

uniapp中nvue页面使用fixed后,数据更改不更新到该视图。

解决方案&#xff1a;position: fixed;定位改成position: absolute; 记录一下&#xff0c;遇到这个贼离谱的问题&#xff0c;uniapp项目里的nvue页面因为要弄个引导蒙版&#xff0c;所以使用了fixed定位&#xff0c;点击蒙版关闭&#xff0c;加了this.$forceUpdate()也不行&am…...

力扣第55题 跳跃游戏 c++ 贪心 + 覆盖 加暴力超时参考

题目 55. 跳跃游戏 中等 相关标签 贪心 数组 动态规划 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &…...

系列十四、Redis的集群(一)

一、是什么 1.1、概述 由于数据量过大&#xff0c;单个master-slave模式难以承担&#xff0c;当出现master节点故障的一瞬间&#xff0c;哨兵重新选举新的master节点之前&#xff0c;这一小段时间将会导致Redis服务不可用&#xff0c;因此需要对多个master-slave主从复制集进行…...

红帽认证 | RHCE考试包括哪些内容?

Red Hat Certified Engineer&#xff08;RHCE&#xff09;考试是一项面向企业级系统管理员的认证考试&#xff0c;是认证Linux系统管理员技能的一种方式。 RHCE证书是Linux管理员领域中最受欢迎和最受认可的证书之一。 那RHCE考试都有哪些内容呢&#xff0c;一起来看看吧&…...

ASPICE标准快速掌握「3.1. 实践示例」

实践示例 本章内容是最重要的,建议慢下来跟着博主的思路一步一步前进 1. 示例背景说明 假设我们现在是一个Tier1的车窗控制软件开发商,我们给OEM提供软件解决方案 1.1. 本过程目标 根据客户、上级部门、安全团队与质量团队等提出的要求,本项目要求SYS.1过程达到ASPICE过…...

pytorch 训练可视化

pytorch 训练可视化 1.from torch.utils.tensorboard 1.from torch.utils.tensorboard from torch.utils.tensorboard import SummaryWriter在最新版本的pytorch中官方提供了tensorboard的api。以下是官方教程的链接 https://pytorch.org/tutorials/intermediate/tensorboard…...

webgis开发参考资料

一、ArcGIS相关 1、ArcGIS for Server 10.3.X 新型紧凑型缓存的解读和应用 http://zhihu.geoscene.cn/article/1038 2、arcgis server 紧促&#xff08;bundle&#xff09;格式缓存文件的读取 https://blog.csdn.net/abc553226713/article/details/8668839 3、ArcGIS 10.0紧…...

JSX 注意事项

学习目标&#xff1a; 掌握 JSX 实际开发过程中的一些注意事项   1. JSX 必须具有一个根节点&#xff0c;如果没有根节点可以使用<></>(幽灵节点)代替根节点将所有元素包裹起来 function App() {return (<><div className"App">1</div&…...

QWEN-AUDIO技术博文:赛博可视化交互设计如何提升TTS产品用户体验

QWEN-AUDIO技术博文&#xff1a;赛博可视化交互设计如何提升TTS产品用户体验 你有没有想过&#xff0c;为什么有些语音合成工具用起来总觉得“差点意思”&#xff1f;输入文字&#xff0c;点击生成&#xff0c;然后等待一个冷冰冰的音频文件下载完成。整个过程就像在操作一台老…...

回文数. Leetcode

给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。例如&#xff0c;121 是回文&#xff0c;而 12…...

Cesium实战:手把手教你用四元数搞定飞行模型朝向,告别极点旋转Bug

Cesium实战&#xff1a;四元数驱动飞行模型朝向的终极解决方案 想象一下&#xff0c;你正在开发一个全球飞行模拟系统&#xff0c;当飞机接近北极点时&#xff0c;模型突然像失控的陀螺一样疯狂旋转——这不是特效&#xff0c;而是许多Cesium开发者遇到的经典痛点。传统欧拉角在…...

OpenClaw隐私保护:千问3.5-9B本地化处理敏感数据方案

OpenClaw隐私保护&#xff1a;千问3.5-9B本地化处理敏感数据方案 1. 为什么我们需要本地化AI处理 去年处理一份投资协议时&#xff0c;我犯了个致命错误——将包含客户隐私条款的合同上传到某云端AI工具进行摘要生成。三天后&#xff0c;法务团队在公开搜索引擎的缓存记录中发…...

【2025最新】基于SpringBoot+Vue的游戏销售平台管理系统源码+MyBatis+MySQL

摘要 随着互联网技术的飞速发展&#xff0c;数字化娱乐产业迎来了前所未有的增长机遇。游戏作为数字娱乐的核心组成部分&#xff0c;其市场规模逐年扩大&#xff0c;用户需求日益多样化。传统的游戏销售模式已无法满足现代消费者的便捷性和个性化需求&#xff0c;亟需一个高效…...

学术PDF处理术:OpenClaw+Qwen3-32B实现论文关键图表提取

学术PDF处理术&#xff1a;OpenClawQwen3-32B实现论文关键图表提取 1. 为什么需要自动化PDF图表提取 作为一名经常需要阅读大量学术论文的研究者&#xff0c;我长期被一个问题困扰&#xff1a;如何高效地从PDF论文中提取关键图表和数据。传统方法要么依赖手动截图和转录&…...

CAN总线终端电阻原理与应用详解

1. CAN总线终端电阻的基础认知作为一名汽车电子工程师&#xff0c;我经常需要处理CAN总线通信异常的问题。每当遇到波形不稳定或通信中断时&#xff0c;终端电阻总是首要检查的对象。CAN总线终端电阻的标准值是120Ω&#xff0c;这个数字在行业内几乎成为常识。但为什么是120Ω…...

程序行为的构成:规则、数据与延迟固化的艺术

程序行为的构成&#xff1a;规则、数据与延迟固化的艺术 2026-04-08 程序行为的构成&#xff1a;规则、数据与延迟固化的艺术 在软件系统中&#xff0c;程序行为并非凭空产生&#xff0c;而是规则作用于数据所产生的可观察效应。这一基本公式将程序的内在逻辑清晰地分为两个部分…...

职场人AI生存指南:10个核心技能,让你不被AI淘汰反而被赋能

掌握AI工具的基础应用职场人需要熟悉主流AI工具的操作&#xff0c;如ChatGPT、Copilot、Notion AI等。了解这些工具的基本功能&#xff0c;如文本生成、数据分析、自动化流程等&#xff0c;能够提升工作效率。定期关注AI工具的更新&#xff0c;学习新功能的应用场景。培养数据思…...

AI赋能智能制造:预测性维护在工业4.0中的落地实践

1. 预测性维护&#xff1a;从被动维修到智能预防的革命 想象一下&#xff0c;你家的空调突然在炎热的夏天罢工了&#xff0c;维修师傅告诉你&#xff1a;"这个零件本来三个月前就该换了"。这种场景在工业生产中放大1000倍&#xff0c;就是传统维护方式带来的痛点。预…...