question

Upvotes
Accepted
87 7 12 26

[EMA C++]Can RefreshMsg&UpdateMsg only be decoded once?

hello:

I develop with EMA C++

I found I can only decode the RefreshMsg once .

First, I decode the RefreshMsg, to get Struct A;

Then, I decode the RefreshMsg, to get Struct B, but failed, all the FIDs become "blank data"

why?

elektronrefinitiv-realtimeelektron-sdkema-apirrtelektron-message-api
decode.png (59.3 KiB)
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
Accepted
25.3k 87 12 25

Hi @luxiangyuan

In your capture, you are pointing to NULL = ptr, but I am guessing you mean the FieldList being blank?

I cannot see your full code, but I notice you are using FieldList iterator

while( fl.forth() ) 

to iterate through the FieldList.

As you may know the while() will loop until it reaches the end of the FieldList.

So, once you have iterated to the end of the FieldList, do you then reset the iterator, before you start the 2nd decode attempt?

fl.reset()

Please confirm.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

thank you , It works

Upvotes
25.3k 87 12 25

Hi @luxiangyuan

As you may be aware, the callback client event handlers such as onRefreshMsg and onUpdateMsg are executed on the API thread context.

In view of this, you should always try and minimise the time spent processing data in the API thread context when you receive a RefreshMsg or UpdateMsg. Otherwise, you risk creating a Slow Consumer scenario where the API is not able to read data quickly enough from the server, causing buffering of data on the ADS and possible disconnect if the buffer overflows.

Therefore, I would advise against decoding a FieldList twice. I would recommend decoding the FieldList once and extracting the fields into application owned containers. You can then process the application owned object in a separate thread - thereby freeing up the API thread to return and continue processing the next message from the server.

The above applies if you plan to consume a higher number of instruments which update frequently. If, however, you are only consuming a relatively low number, then the Slow Consumer scenario may not arise. I cannot define what constitutes high number / low number as this depends on many factors.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.