DDS (Data Distribution Service) 数据分发服务-规范中文翻译_005

DDS (Data Distribution Service) 数据分发服务-规范中文翻译_005


2.以数据为中心的订阅发布(DCPS)

2.2 平台无关模型(Platform Independent Model ,PIM)

2.2.2 平台无关模型(PIM)描述

2.2.2.1 基础设施模块

2.2.2.1.2 DomainEntity类

DomainEntity是所有DCPS实体的抽象基类,DomainParticipant除外。其唯一目的是表示DomainParticipant是一种特殊的实体,它充当所有其他实体的容器,但本身不能包含其他DomainParticipant。

DomainEntity
no attributes
no operations
2.2.2.1.3 QosPolicy 类
QosPolicy
attributes
name string
no operations

QosPolicy类为应用程序提供了指定服务质量参数的基本机制,它具有一个属性name,用于唯一标识每个QoS策略。所有具体的QosPolicy类都派生自此基类,并包含一个类型取决于具体QoS策略的值。

QosPolicy值的类型可以是原子的,例如整数或浮点数,或复合类型(结构)。需要连续地设置多个参数以定义QosPolicy的一致值时,就会使用复合类型。

可以使用QosPolicy列表配置每个实体。但是,任一实体无法支持任意QosPolicy。例如,DomainParticipant支持与Topic或Publisher不同的QosPolicy。

可以在创建实体时设置QosPolicy,也可以使用set_qos方法修改QosPolicy。列表中的每个QosPolicy都独立于其他QosPolicy进行处理,这种方法具有可扩展的优点。但是也可能存在多个策略发生冲突的情况。每次通过set_qos方法修改策略时,都会执行一致性检查。

在某个策略设置为给定值后需要更改时,不强制要求立即应用新值,允许服务在过渡阶段后应用它。此外,一些QosPolicy具有“不可变”语义,这意味着它们只能在实体创建时指定,或者在实体上调用启用操作之前指定。

小节2.2.3支持的QoS提供所有QosPolicy的列表,包括它们的含义,特征和可能的值,以及它们适用的具体实体。

2.2.2.1.4 Listener接口

Listener是所有监听器接口的抽象根类。所有受支持的具体监听器接口(每个实体一个:DomainParticipant,Topic,Publisher,DataWriter,Subscriber和DataReader)都派生自此根类,并添加原型依赖于具体监听器的方法。

Listener
no attributes
no operations

有关已定义监听器接口的列表,请参见2.2.4.3通过监听器访问。监听器接口为服务提供了一种机制,此机制可以异步地通知应用程序通信状态的相关变化。

2.2.2.1.5 Status类

Status类是所有通信状态对象的抽象根类。所有具体的Status类都是此类的特殊化。

Status
no attributes
no operations

每个具体实体与一组Status对象相关联,其值表示该实体的“通信状态”。可以通过实体上的相应方法访问这些状态值。这些状态值的更改既会激活相应的StatusCondition对象,又会触发合适的Listener对象的调用,从而异步通知应用程序。

Status对象及其与Listener和Condition对象的关系详见2.2.4.1 通信状态。

2.2.2.1.6 WaitSet 类

WaitSet对象允许应用程序等待,直到一个或多个附加的Condition对象的trigger_value为TRUE,否则直到超时到期。

WaitSet
no attributes
operations
attach_condition ReturnCode_t
a_condition Condition
detach_condition ReturnCode_t
a_condition Condition
wait ReturnCode_t
inout: active_conditions Condition []
timeout Duration_t
get_conditions ReturnCode_t
inout: attached_conditions Condition []

WaitSet类没有工厂。它通过编程语言中自然的方式直接创建对象(例如使用C ++或Java中的“new”)。这是
因为它不一定与单个DomainParticipant相关联,并且可以用于等待与不同DomainParticipant对象关联的Condition对象。

以下子项详细说明了所有方法。

2.2.2.1.6.1 attach_condition

将条件Condition附加到WaitSet中。

可以在当前(通过wait方法)正在等待的WaitSet上附加Condition。在这种情况下,如果Condition的trigger_value为TRUE,则附加条件将取消阻止WaitSet。

添加已附加到WaitSet的Condition无效。

除标准错误代码外,还可能返回错误代码:OUT_OF_RESOURCES。

2.2.2.1.6.2 detach_condition

从WaitSet中分离条件Condition。

如果条件未附加到WaitSet,则方法将返回PRECONDITION_NOT_MET。

除标准错误代码外,还可能返回错误代码:PRECONDITION_NOT_MET。

2.2.2.1.6.3 wait

此方法允许应用程序线程等待某些条件的发生。如果附加到WaitSet的所有条件的trigger_value都不为TRUE,则wait方法将阻塞并挂起调用线程。

wait操作的结果是所有trigger_value为TRUE的附加条件的列表(即取消等待阻塞的条件)。

wait操作采用超时参数指定等待的最长持续时间。超过此持续时间并且没有附加的Condition对象为true,wait将返回TIMEOUT。

不允许多个应用程序线程在同一个WaitSet上等待。如果在已经有线程阻塞的WaitSet上调用wait操作,则操作将立即返回PRECONDITION_NOT_MET。

2.2.2.1.6.4 get_conditions

此方法获取附加条件列表。

2.2.2.1.7 Condition类

Condition类是所有可以附加到WaitSet的条件的根类。这个基类专门用于中间件已知的三个类:GuardCondition(2.2.2.1.8),StatusCondition(2.2.2.1.9)和ReadCondition(2.2.2.5.8)。

Condition
no attributes
operations
get_trigger_value boolean

Condition的trigger_value可以为TRUE或FALSE,由服务自动设置。

2.2.2.1.7.1 get_trigger_value

此操作获取Condition的trigger_value。

2.2.2.1.8 GuardCondition类

GuardCondition对象是一个特殊的Condition,其trigger_value完全在应用程序的控制之下。

GuardCondition
no attributes
operations
set_trigger_value ReturnCode_t
value boolean

GuardCondition类没有工厂。它通过编程语言中自然的方式直接创建对象(例如,在C ++或Java中使用“new”)。首次创建时,trigger_value设置为FALSE。

GuardCondition类的目的是为应用程序提供手动唤醒WaitSet的方法。通过将GuardCondition附加到WaitSet,然后调用set_trigger_value方法设置trigger_value来实现。

2.2.2.1.8.1 set_trigger_value

此方法设置GuardCondition的trigger_value。

WaitSet对象的行为取决于其附加条件的trigger_value的更改。因此,GuardCondition附加到的任何WaitSet都可能受此方法影响。

StatusCondition对象是与每个实体关联的特定条件。

StatusCondition
no attributes
operations
set_enabled_statuses ReturnCode_t
mask StatusKind []
get_enabled_statuses StatusKind []
get_entity Entity

StatusCondition的trigger_value取决于该实体的通信状态(例如,数据到达,信息丢失等),由StatusCondition上的enabled_statuses集“过滤”。

enabled_statuses及其与Listener和WaitSet的关系详见2.2.4.4.1 StatusCondition的触发状态。

2.2.2.1.9.1 set_enabled_statuses

此方法定义了确定StatusCondition的trigger_value时需要考虑的通信状态列表,可能会更改StatusCondition的trigger_value。

WaitSet对象的行为取决于其附加条件的trigger_value的更改。因此,StatusCondition附加到的任何WaitSet都可能受此方法的影响。

如果未调用此函数,则启用状态的默认列表将包括所有状态。

2.2.2.1.9.2 get_enabled_statuses

此方法获取需要考虑的通信状态列表,以确定StatusCondition的trigger_value,方法返回在上次调用set_enabled_statuses时显式设置的状态;如果从未调用set_enabled_statuses,则返回默认列表(请参阅2.2.2.1.9.1)。

2.2.2.1.9.3 get_entity

此方法返回与StatusCondition关联的实体。请注意,每个StatusCondition只关联一个实体。

译文连载

上一篇:DDS (Data Distribution Service) 数据分发服务-规范中文翻译_004

下一篇:待续


相关链接

一文读懂DDS(数据分发服务)

BLUE DCS分布式数据连接解决方案

产品试用:海蓝云平台-Blue DCS

发布了3 篇原创文章 · 获赞 5 · 访问量 980

猜你喜欢

转载自blog.csdn.net/DDS_CSIT/article/details/104770150
dds