OpenSplice DDS:发布,直到超时
Posted
技术标签:
【中文标题】OpenSplice DDS:发布,直到超时【英文标题】:OpenSplice DDS: Publish, until some timeout 【发布时间】:2017-02-03 11:42:29 【问题描述】:我每天都在学习更多关于 dds 的知识,所以我的问题听起来很奇怪。我希望这是有道理的。
我正在编写的某些 dds 包装器的要求之一是,如果它无法写入,它会在一段时间后超时。 我的问题:我该怎么做?
在Prism Tech's website's tutorial 上,有关于如何使用WaitSet
来阻止读取操作的说明,但是写入呢?
这是一些包含问题的代码:
dds::domain::DomainParticipant dp(0);
dds::topic::Topic<MyType> topic(dp, "MyTopic");
dds::pub::Publisher pub(dp);
dds::pub::DataWriter<MyType> dw(pub, topic);
MyType t;
dw.write(t); //how can I make this block for 5 seconds (tops), and then throw an error on failure?
我注意到 API DataWriter::wait_for_acknowledgements(int timeout)
中存在一个函数,但这似乎绑定到 DataWriter
对象,而不是特定的编写调用。我可以将它与上面的调用绑定吗?
【问题讨论】:
【参考方案1】:这是在 QoS 中配置的,参见 RELIABILITY,字段“max_blocking_time”。如何设置此值将取决于供应商的实施。通常你得到当前的 QoS,更新字段,写回 QoS。请记住,必须在其他事情发生之前设置某些 QoS 策略。可靠性是“启用之前”(至少在我最熟悉的实现中),这意味着您需要创建禁用的数据写入器,更新 QoS,然后启用写入器。
如果可以在应用程序外部设置 QoS(例如通过 XML),那么您可以轻松设置策略。否则,您需要在代码中完成。
来自规范:
max_blocking_time 的值表示如果 DataWriter 没有空间存储写入的值,则允许 DataWriter::write 操作阻塞的最长时间。默认 max_blocking_time=100ms。
【讨论】:
非常感谢!我会尽快尝试这个解决方案并报告。我想在这段时间之后它会抛出一个错误,我可以捕捉和处理,对吧? 取决于实现和语言,是否是 DDS_RETCODE_TIMEOUT、RETCODE_TIMEOUT、dds::core::TimeoutError、TimeoutException 等。通常这是资源约束而不是通信问题(历史不够深入,此参与者的内存已耗尽等)。以上是关于OpenSplice DDS:发布,直到超时的主要内容,如果未能解决你的问题,请参考以下文章
DDS - 推荐哪一个 - OpenSplice 或 CoreDX? [关闭]
错误的 ELF 类:如何成功安装 OpenSplice DDS?
OpenSplice DDS 开源实现支持——数据库事务处理?
构建 dds-tutorial-cpp-ex 时未找到 OpenSpliceConfig.cmake 或 opensplice-config.cmake