Are you pre-allocating the 'hello_dataList' and 'infoList' or are you
letting the middleware allocate those? If you're doing the latter, the
'return_loan' method needs to be called after processing the samples or at
least before the next take. If that step is omitted a consecutive take will
return 'PRECONDITION_NOT_MET' (return code is not checked in your code) and
the buffers will remain untouched.

On 15 May 2012 13:32, Pepijn Schoen <p.w.sch...@differ.nl> wrote:

> Hello all,****
>
> ** **
>
> I’ve created a DataReader, DataWriter and topic with all default QOS
> policies. I’m continually publishing data, but the DataReader keeps on
> receiving only the first message published. I’m using the code shown below
> to read messages:****
>
> result = hello_reader->take (hello_dataList, infoList, LENGTH_UNLIMITED,
> NOT_READ_SAMPLE_STATE, ANY_VIEW_STATE, ALIVE_INSTANCE_STATE);****
>
> ** **
>
> I’ve changed this from the default to notice a difference. The default was:
> ****
>
> result = hello_reader->take (hello_dataList, infoList, 1,
> ANY_SAMPLE_STATE, ANY_VIEW_STATE, ANY_INSTANCE_STATE);****
>
> ** **
>
> This did not give any other result. My question is: how do I read messages
> only once, and move up in the queue of available messages? (the relevant
> sample of the code is shown at the end of the message)****
>
> ** **
>
> Greetings,****
>
> ** **
>
> Pepijn****
>
> ** **
>
> – Sample code –****
>
> ** **
>
> while (!terminate) {****
>
>        ConditionSeq_var conditionList = new ConditionSeq();****
>
>        result = w.wait (conditionList.inout (), DURATION_INFINITE);****
>
> ** **
>
>        if (result == DDS::RETCODE_ALREADY_DELETED) {****
>
>               terminate = TRUE;****
>
>               continue;****
>
>        }****
>
> ** **
>
>        int imax = conditionList->length ();****
>
>        for (int i = 0; i < imax; i++) {****
>
>               if (conditionList[i].in() == hello_status) {****
>
>               result = hello_reader->take (hello_dataList, infoList, 1,
> ANY_SAMPLE_STATE, ANY_VIEW_STATE, ANY_INSTANCE_STATE);****
>
> ** **
>
>               int jmax = hello_dataList->length ();****
>
>               if (jmax != 0) {****
>
>                      for (int j = 0; j < jmax; j++) {****
>
>                             if (infoList[j].valid_data) {****
>
>                                    HelloTopicType ht = hello_dataList[j];*
> ***
>
>                                    cout << ht.message << endl; // The
> exact same message keeps on being published again and again****
>
>                             }****
>
>                      }****
>
>               }****
>
>        } else {****
>
>               cout << "unknown condition triggered: " <<
> conditionList[i].in() << endl;****
>
>        }****
>
> }****
>
> ** **
>
> _______________________________________________
> OpenSplice DDS Developer Mailing List
> Developer@opensplice.org
> Subscribe / Unsubscribe
> http://dev.opensplice.org/mailman/listinfo/developer
>
>
_______________________________________________
OpenSplice DDS Developer Mailing List
Developer@opensplice.org
Subscribe / Unsubscribe http://dev.opensplice.org/mailman/listinfo/developer

Reply via email to