2017-02-03 1 views
0

私は毎日ddsについてもっと学んでいるので、私の質問は私の奇妙な音です。それが理にかなってほしい。OpenSplice DDS:タイムアウトまでいくつかのタイムアウトまで

私が書いているいくつかのddsラッパーの要件の1つは、書き込みに失敗した場合、タイムアウト期間が過ぎるとタイムアウトすることです。 私の質問:どうすればいいですか?

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オブジェクトにバインドしているようです。上記の呼び出しでバインドできますか?

答えて

0

QoSで設定されています(「信頼性」、フィールド「max_blocking_time」)。この値の設定方法は、ベンダーの実装によって異なります。一般的に、現在のQoSを取得し、フィールドを更新し、QoSを書き戻します。特定のQoSポリシーは、何かが発生する前に設定する必要があることに注意してください。信頼性は「有効にする」(少なくとも私が最もよく慣れている実装では)です。つまり、データライターを無効にしてQoSを更新し、ライターを有効にする必要があります。

アプリケーションの外部で(たとえばXML経由で)QoSを設定できる場合は、ポリシーを簡単に設定できます。それ以外の場合は、コードで実行する必要があります。

スペックから:

max_blocking_timeの値が最大時間操作を示しDataWriter ::書き込みがDataWriterが書き込まれた値を格納するスペースがない場合はブロックすることが許可されています。デフォルトのmax_blocking_time = 100ms。

+0

ありがとうございます!私はすぐにこの解決策を試し、報告します。私はこの期間が過ぎるとエラーを投げかけ、捕まえることができると思います。 –

+0

DDS_RETCODE_TIMEOUT、RETCODE_TIMEOUT、dds :: core :: TimeoutError、TimeoutExceptionなどの実装や言語に依存します。通常、これは通信の問題ではなくリソースの制約です、この参加者のためにメモリが使い果たされた、など)。 –

関連する問題