OpenSplice DDS: публикация до некоторого времени ожидания

Я каждый день узнаю больше о ддс, поэтому мой вопрос звучит странно. Я надеюсь, что это имеет смысл.

Одно из требований, предъявляемых к какой-либо оболочке dds, которую я пишу, заключается в том, что по истечении некоторого времени ожидания оно истекает, если не удается записать. Мой вопрос: Как я могу это сделать?

На Учебник сайта 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?

Я заметил, что в API есть функция DataWriter::wait_for_acknowledgements(int timeout), но это, похоже, связано с DataWriter объект, а не конкретный вызов написания. Могу ли я связать это с вызовом выше?

0

Решение

Это настраивается в QoS, см. НАДЕЖНОСТЬ, поле «max_blocking_time». То, как вы установите это значение, будет зависеть от реализации поставщика. Обычно вы получаете текущее QoS, обновляете поле и записываете QoS обратно. Имейте в виду, что определенные политики QoS должны быть установлены до того, как что-то еще произойдет. Надежность — это «Перед включением» (по крайней мере, в той реализации, с которой я больше всего знакома), что означает, что вам нужно отключить средство записи данных, обновить QoS, а затем включить средство записи.

Если QoS можно установить вне приложения (например, через XML), вы можете легко установить политику. В противном случае вам нужно сделать это в коде.

Из спецификации:

Значение max_blocking_time указывает максимальное время, в течение которого операции DataWriter :: write разрешено блокировать, если у DataWriter нет места для хранения записанного значения. Значение по умолчанию max_blocking_time = 100 мс.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]