在DDS规范中,提供了一些用于读取和写入数据样本的操作。在上面的示例中,我们使用了take_next_sample()操作,来读取下一个样本并从读取器那里“获取”所有权。Message Data Reader还有以下几个take操作:
- take():从读取器中获取最多max_samples个值的序列。
- take_instance():获取指定实例的值序列。
- take_next_instance():获取属于同一实例的样本序列,而无需指定实例。
还有对应于这些“take”操作的“read”操作,它们获取相同的值,但将样本保留在读取器中,并仅在SampleInfo中标记为已读。
由于这些其他操作是批量读取值的,当样本快速到达时效率更高。以下是一个使用take()函数每次读取最多5个样本的示例调用:
MessageSeq messages(5);
DDS::SampleInfoSeq sampleInfos(5);
DDS::ReturnCode_t status = message_dr->take(
messages,
sampleInfos,
5,
DDS::ANY_SAMPLE_STATE,
DDS::ANY_VIEW_STATE,
DDS::ANY_INSTANCE_STATE
);
三个状态参数可以根据需要特化返回哪些样本。详细了解其使用方法请参考DDS规范。
内容由零声教学AI助手提供,问题来源于学员提问