OpenSplice DDS:发布,直到超时[英] OpenSplice DDS: Publish, until some timeout

本文是小编为大家收集整理的关于OpenSplice DDS:发布,直到超时的处理方法,想解了OpenSplice DDS:发布,直到超时的问题怎么解决?OpenSplice DDS:发布,直到超时问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我每天都在学习有关DD的更多信息,所以我的问题是我的声音很奇怪.我希望这是有道理的.

我正在编写的某些DDS包装器的要求之一是,如果未能编写,则在一段时间后的时间内就耗尽了. 我的问题:我该怎么做?

on Prism Tech说明如何使用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?

I noticed there exists a function in the API DataWriter::wait_for_acknowledgements(int timeout) ,但这似乎与DataWriter对象绑定,而不是特定的写作呼吁.我可以用上面的呼叫绑定吗?

推荐答案

这是在QoS,CF可靠性,字段" max_blocking_time"中配置的.您如何设置此值将取决于供应商的实现.通常,您可以获得当前的QoS,更新字段,将QoS写回.请记住,必须在发生其他事情之前设定某些QoS策略.可靠性是"在启用之前"(至少在我最熟悉的实施中),这意味着您需要创建数据撰写的数据作者,更新QoS,然后启用作者.

.

如果可以在应用程序之外设置QoS(例如通过XML),则可以轻松设置策略.否则,您需要在代码中进行.

从规格:

MAX_BLOCKING_TIME的值表示操作DataWriter :: Write的最大时间,如果DataWriter没有空间来存储编写的值,则允许阻止.默认max_blocking_time = 100ms.

本文地址:https://www.itbaoku.cn/post/1794061.html