2017-02-03 14 views
0

나는 dds에 대해 매일 더 많은 것을 배우기 때문에 나의 질문은 소리가 이상합니다. 나는 그것이 의미가 있기를 바랍니다.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 개체에 바인딩 될 것으로 보인다. 위의 호출을 통해 바인딩 할 수 있습니까?

답변

0

QoS, 신뢰성, 필드 "max_blocking_time"에서 구성됩니다. 이 값을 설정하는 방법은 공급 업체의 구현에 따라 다릅니다. 일반적으로 현재의 QoS를 얻고, 필드를 업데이트하고, QoS를 다시 작성합니다. 특정 QoS 정책은 다른 일이 일어나기 전에 설정되어야합니다. 안정성은 "사용하기 전에"(적어도 가장 익숙한 구현에서)입니다. 즉, 데이터 기록기를 비활성화하고 QoS를 업데이트 한 다음 작성기를 활성화해야합니다.

QoS를 응용 프로그램 외부에서 설정할 수있는 경우 (예 : XML을 통해) 정책을 쉽게 설정할 수 있습니다. 그렇지 않으면 코드에서 수행해야합니다. 스펙에서

:

max_blocking_time의 값은 동작 DataWriter이 :: 쓰기가 DataWriter가 기록 된 값을 저장할 수있는 공간이없는 경우 차단 허용되는 최대 시간을 나타냅니다. 기본 max_blocking_time = 100ms입니다.

+0

고맙습니다. 나는 곧이 해결책을 시도하고보고 할 것이다. 이 기간이 지나면 오류가 발생하여 잡아서 처리 할 수 ​​있다고 가정합니다. –

+0

DDS_RETCODE_TIMEOUT, RETCODE_TIMEOUT, dds :: core :: TimeoutError, TimeoutException, ... 등의 구현 및 언어에 따라 다름 일반적으로 이는 통신 문제가 아닌 리소스 제약 사항입니다 (기록이 충분히 깊지 않음). ,이 참가자 등을 위해 메모리가 모두 소모됨). –