问题描述
我每天都在学习有关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.