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只关联一个实体。