当前位置: 首页 > 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}
http://www.lryc.cn/news/204117.html

相关文章:

  • ant-design-vue 3 a-table保留选中状态
  • golang 工程组件:grpc-gateway option自定义http规则
  • 亚马逊添加购物车和收藏有什么区别
  • JAVA-编程基础-11-03-java IO 字节流
  • python之Cp、Cpk、Pp、Ppk
  • 统信uos 1030 企业版 安装.net core环境
  • 2023/10/23学习记录
  • flask入门(四)前后端数据传输
  • JS——垃圾回收的原理
  • Spring Cloud Gateway 路由构建器的源码分析
  • IT行业哪个方向比较好就业?
  • uniapp中nvue页面使用fixed后,数据更改不更新到该视图。
  • 力扣第55题 跳跃游戏 c++ 贪心 + 覆盖 加暴力超时参考
  • 系列十四、Redis的集群(一)
  • 红帽认证 | RHCE考试包括哪些内容?
  • ASPICE标准快速掌握「3.1. 实践示例」
  • pytorch 训练可视化
  • webgis开发参考资料
  • JSX 注意事项
  • MQ常见的问题(kafka保证消息不丢失)
  • Unity编辑器扩展 --- AssetPostprocessor资源导入自动设置
  • 用Flask快速生成报表
  • 关于时序预测可解释性预测
  • 泊车功能专题介绍 ———— AVP系统技术要求之场地规范定位要求
  • 【STM32】时钟设置函数(寄存器版)
  • 【DDD】贫血模型和充血模型
  • 【JS学习】字符串的substring方法
  • vue部署,chunk文件有部分404,解决方案
  • 《红蓝攻防对抗实战》六.常规反弹之利用NC在windows系统执行反弹shell
  • python如何创建自己的对冲交易算法