At this web page: http://community.rti.com/rti-doc/45f/ndds.4.5f/doc/html/api_java/interfacecom_1_1rti_1_1dds_1_1publication_1_1DataWriter.html#908102c9730fb19be447ed4af01da75e
I found documentation for the write_w_timestamp_untyped. The documenation says, "Publish a data sample using the given time instead of the current time".
I am not sure about this documentation. To me there are 2 possibilities.
1) The instance data WILL be published right away (current time), but the timestamp will indicate the Time_t value passed to the method.
2) The instance data WILL NOT be published right away (current time), but the data will be published at the Time_t value passed to the method.
It seems it should be definition 2). If so, does that mean RTI DDS will wait to publish the data at the time passed in the Time_t parameter? Does RTI DDS set a timer and allow the thread to continue, or does RTI DDS perform a sleep causing the thread to wait? What if the Time_t parameter is set to some time that has already occurred?
Thanks,
Herb Miller
Hello Herb,
It is the possibility (1) from the two you mentioned. The data will be published "immediately" (some DDS configuration like FlowControl the actual sending of the data). But the "source timestamp" will be the time passed to the method.
As you guessed there are some constraints on the Time_t you pass. It has to be greater or equal to the previous values of the 'source timestamp' written by that DataWriter, otherwise, the wrote operation will fail.
There is a more general version of this function that has additional documentation. It is called write_w_param
Gerardo
Thanks Gerardo.
Is there any way that RTI DDS will publish data for me at a future time, or do I need to provide my own timer or wait logic and then publish the data immediately?
The "write" into the DataWriter cache happens as part of the write call and the source_timestamp gets set then (unless it is passed as part of the write call).
There are mechanisms to defer the sending of the message on the wire to another thread so that it may happen at a different time. This is what the DataWriter PUBLISH_MODE QosPolicy does. However, these mechanisms are for prioritizing the data or shaping the bandwidth used. They are not thought to provide the means to "schedule a future time" to send the data.
So to answer your question, yes, I think that you would need to provide your own "timer and wait" logic to do it...
Gerardo
Hi Gerardo
Can you please tell which function is used to timestamp data with the current clock time. I don't want to send my own generated time.
Is it possible If yes, then how?
Hi,
There's a chapter in our documentation regarding selecting clocks. From our API doc you can read:
So there's no need for you to get your own timestamp unless you want to. The best way is follow Gerardo's advice: use write_w_param and let the system handle their own clock by setting the correct clock in the configuration.
Is there any specific reason why you want to provide your own time?
Thanks,
Sara