我发现了问题。原因是因为我的应用程序发布速度快于网络分发样本的速度。解决方法是在DataWriter上使用以下Qos:
DDS::DataWriterQos dw_qos; pub->get_default_datawriter_qos (dw_qos); dw_qos.history.kind = DDS::KEEP_ALL_HISTORY_QOS; dw_qos.reliability.kind = DDS::RELIABLE_RELIABILITY_QOS; dw_qos.reliability.max_blocking_time.sec = 22; dw_qos.reliability.max_blocking_time.nanosec = 0; dw_qos.resource_limits.max_samples_per_instance = 5; DDS::DataWriter_var dw = pub->create_datawriter(topic, dw_qos, 0, OpenDDS::DCPS::DEFAULT_STATUS_MASK);
此数据编写器具有以下行为:
最多可以排序5个待处理的样本到一个或多个 订户。 如果有5个样本待处理,则写入调用最多可阻止22个 秒等待队列中的开放。 如果没有打开,则写入调用将返回 DDS :: RETCODE_TIMEOUT而不是RETCODE_OK。
最多可以排序5个待处理的样本到一个或多个 订户。
如果有5个样本待处理,则写入调用最多可阻止22个 秒等待队列中的开放。
如果没有打开,则写入调用将返回 DDS :: RETCODE_TIMEOUT而不是RETCODE_OK。
感谢您的帮助!