目录
DataWriter分析
DataWriter 类分析
DataWriter 类是 Fast DDS 库中的一个重要类,它用于实现 DDS(Data Distribution Service)发布-订阅通信模型中的数据写入功能。
用途:
DataWriter 类用于向特定主题(Topic)发布数据。它负责将数据写入到该主题,并将数据传输给订阅该主题的数据读取器(DataReader)。通过 DataWriter,用户可以发布数据,注册和注销数据实例,获取状态信息以及设置数据写入的 QoS(Quality of Service)。
成员变量:
- impl_:指向 DataWriterImpl 类的实例的指针,它是 DataWriter 的实际实现。
成员函数:
DataWriter 类提供了多个成员函数,下面是一些重要的函数及其作用:
- enable():启用数据写入器。
- write(data):将数据写入到主题。
- register_instance(instance):注册数据实例。
- unregister_instance(instance):注销数据实例。
- get_key_value(key_holder, handle):获取数据实例的键值。
- set_qos(qos):设置数据写入的 QoS。
- get_qos():获取当前数据写入的 QoS。
- set_listener(listener):设置数据写入的监听器。
- get_topic():获取关联的主题。
- get_publisher():获取创建该数据写入器的发布者。
大致的实现方法:
DataWriter 类的实现方法主要依赖于底层的 DataWriterImpl 类。DataWriterImpl 类是 DataWriter 的实际实现,它封装了与数据写入相关的底层逻辑和操作。在 DataWriter 的成员函数中,通过调用 DataWriterImpl 对应的成员函数来完成相应的操作。例如,在 write(data) 函数中,会调用 DataWriterImpl 的 write(data) 函数来实际执行数据写入操作。
同时,DataWriter 类还提供了一些其他功能,如通过 loan_sample 和 discard_loan 函数直接在内部池中借用和归还数据样本的功能,以及获取数据写入的状态信息等。
下面是详细的方法描述

因为这个类本质上只是一个包装类,所以重点函数基本上都是DataWriterImpl 类实现的
DataWriterImpl 类分析
类图

DataWriterImpl类是Fast DDS库中的一个关键类,用于实现数据写入的功能。它包含了数据写入相关的操作和状态,以及与底层通信层(RTPS)的交互。下面是对该类及其函数的作用和大致实现方式的介绍:
- DataWriterImpl(PublisherImpl*, TypeSupport, Topic*, const DataWriterQos&, DataWriterListener*):类的构造函数,用于创建DataWriterImpl对象并初始化其成员变量。
- ~DataWriterImpl():类的析构函数,用于清理资源和释放内存。
- enable():启用DataWriterImpl对象,创建底层实体(RTPSWriter)等。
- loan_sample(void*, LoanInitializationKind):从内部池中借用一个样本,用于写入数据。
- discard_loan(void*&):废弃之前借用的样本。
- write(void*):将数据写入到Topic中。
- write(void*, fastrtps::rtps::WriteParams&):附带写入参数,将数据写入到Topic中。
- write(void*, const InstanceHandle_t&):将数据写入到指定的实例中。
- write_w_timestamp(void*, const InstanceHandle_t&, const fastrtps::Time_t&):附带时间戳,将数据写入到指定的实例中。
- register_instance(void*):注册一个新的实例,并返回实例的句柄。
- register_instance_w_timestamp(void*, const fastrtps::Time_t&):附带时间戳,注册一个新的实例,并返回实例的句柄。
- unregister_instance(void*, const InstanceHandle_t&, bool = false):注销指定实例。
- unregister_instance_w_timestamp(void*, const InstanceHandle_t&, const fastrtps::Time_t&, bool = false):附带时间戳,注销指定实例。
- guid():获取DataWriter的GUID。
- get_instance_handle():获取DataWriter的实例句柄。
- get_type():获取数据类型支持对象。
- get_qos():获取DataWriter的QoS配置。
- get_topic():获取DataWriter关联的Topic。
- get_listener():获取DataWriter的监听器。
- set_listener(DataWriterListener*):设置DataWriter的监听器。
- get_publication_matched_status(PublicationMatchedStatus&):获取发布匹配状态。
- get_offered_deadline_missed_status(OfferedDeadlineMissedStatus&):获取未满足的最后期限状态。
- get_offered_incompatible_qos_status(OfferedIncompatibleQosStatus&):获取不兼容的QoS状态。
- set_qos(const DataWriterQos&):设置DataWriter的QoS配置。
- get_liveliness_lost_status(LivelinessLostStatus&):获取失去活跃性的状态。
- get_publisher():获取关联的Publisher。
- assert_liveliness():声明活跃性。
- disable():禁用DataWriterImpl对象,移除所有监听器。
- clear_history(size_t*):清除历史记录中的所有数据。
- get_sending_locators(rtps::LocatorList&):获取DataWriter可以发送数据的定位器列表。

DataWriter是FastDDS库中用于数据发布的类,它实现了DDS的出版-订阅模型。DataWriterImpl是其实现,包含数据写入相关操作,如write、register_instance等。DataWriterImpl通过内部的RTPS通信处理数据传输,管理历史记录以支持可靠性等功能。此外,文章还讨论了关键函数如write_w_timestamp、register_instance和状态管理函数,如get_publication_matched_status、get_offered_deadline_missed_status等。

2255

被折叠的 条评论
为什么被折叠?



