OpenSplice DDS:发布,直到某些超时

时间:2017-02-03 11:42:29

标签: c++ synchronous data-distribution-service opensplice

我每天都在学习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 个答案:

答案 0 :(得分:0)

这是在QoS中配置的,参见可靠性,字段&#34; max_blocking_time&#34;。如何设置此值取决于供应商的实现。通常,您获得当前QoS,更新字段,重新编写QoS。请记住,必须在其他事情发生之前设置某些QoS策略。可靠性是&#34;在启用之前&#34; (至少在我最熟悉的实现中),这意味着你需要创建数据写入器禁用,更新QoS,然后启用编写器。

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

来自规范:

max_blocking_time的值表示如果DataWriter没有空间来存储写入的值,则允许操作DataWriter :: write的最大阻塞时间。默认的max_blocking_time = 100ms。

相关问题