OpenSplice DDS:发布,直到超时
OpenSplice DDS: Publish, until some timeout
我每天都在学习更多关于 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?
我注意到APIDataWriter::wait_for_acknowledgements(int timeout)
中有一个函数,但是这个好像是绑定到DataWriter
对象上的,而不是具体的写调用。可以绑定上面的调用吗?
这是在 QoS 中配置的,请参见可靠性字段 "max_blocking_time"。如何设置此值将取决于供应商的实施。通常你得到当前的 QoS,更新字段,写回 QoS。请记住,必须在其他事情发生之前设置某些 QoS 策略。可靠性是 "Before Enable"(至少在我最熟悉的实现中),这意味着您需要创建 data-writer 禁用,更新 QoS,然后启用编写器。
如果可以在应用程序外部设置 QoS(例如通过 XML),那么您可以轻松设置策略。否则,您需要在代码中完成。
来自规范:
max_blocking_time的值表示如果DataWriter没有space来存储写入的值,则允许操作DataWriter::write阻塞的最长时间.默认max_blocking_time=100ms.
我每天都在学习更多关于 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?
我注意到APIDataWriter::wait_for_acknowledgements(int timeout)
中有一个函数,但是这个好像是绑定到DataWriter
对象上的,而不是具体的写调用。可以绑定上面的调用吗?
这是在 QoS 中配置的,请参见可靠性字段 "max_blocking_time"。如何设置此值将取决于供应商的实施。通常你得到当前的 QoS,更新字段,写回 QoS。请记住,必须在其他事情发生之前设置某些 QoS 策略。可靠性是 "Before Enable"(至少在我最熟悉的实现中),这意味着您需要创建 data-writer 禁用,更新 QoS,然后启用编写器。
如果可以在应用程序外部设置 QoS(例如通过 XML),那么您可以轻松设置策略。否则,您需要在代码中完成。
来自规范:
max_blocking_time的值表示如果DataWriter没有space来存储写入的值,则允许操作DataWriter::write阻塞的最长时间.默认max_blocking_time=100ms.