Fast-DDS开发入门 二

下面通过简单讲解Fast-DDS的HelloWorld例程,介绍Fast-DDS发布者和订阅者之间的通信过程

一、工程结构

HelloWorld例程包含如下文件:

CMakeLists.txt

HelloWorld.cxx

HelloWorld.h

HelloWorld.idl

HelloWorld_main.cpp

HelloWorldPublisher.cpp

HelloWorldPublisher.h

HelloWorldPubSubTypes.cxx

HelloWorldPubSubTypes.h

HelloWorldSubscriber.cpp

HelloWorldSubscriber.h

Makefile

README.txt

本篇重点讲解HelloWorldPublisher.cpp、HelloWorldSubscriber.cpp、HelloWorld_main.cpp里边的关键代码

二、发布者

HelloWorldPublisher.cpp中有两个重要函数:

bool init()和bool publish(bool waitForListener)

1. 创建域参与者

关键代码:

mp_participant = Domain::createParticipant(PParam);

这行代码在init函数中

2. 注册数据类型

关键代码:

Domain::registerType(mp_participant, &m_type);

这行代码在init函数中

3. 创建发布者

关键代码:

mp_publisher = Domain::createPublisher(mp_participant, Wparam, (PublisherListener*)&m_listener);

这行代码在init函数中

4. 发布数据

关键代码:

mp_publisher->write((void*)&m_Hello);

这行代码在publish函数中

三、订阅者

HelloWorldSubscriber.cpp中有两个重要函数:

bool init()和void onNewDataMessage(eprosima::fastrtps::Subscriber* sub)

其中onNewDataMessage是HelloWorldSubscriber的内部类SubListener中的函数

1. 创建域参与者

关键代码:

mp_participant = Domain::createParticipant(PParam);

这行代码在init函数中

2. 注册数据类型

关键代码:

Domain::registerType(mp_participant, &m_type);

这行代码在init函数中

3. 创建订阅者

关键代码:

mp_subscriber = Domain::createSubscriber(mp_participant, Rparam, (SubscriberListener*)&m_listener);

这行代码在init函数中

4. 读取数据

关键代码:

sub->takeNextData((void*)&m_Hello, &m_info);

这行代码在onNewDataMessage函数中

四、主函数

主函数执行时,根据参数确定程序以发布者还是订阅者运行

如果是发布者,先调用init进行初始化,然后启动线程,线程的回调函数中调用了publish进行数据的发送

如果是订阅者,先调用init进行初始化,然后等待,数据发送过来的时候,会自动调用onNewDataMessage进行数据的接收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值