DDS底層實作可能不是你想的『有資料進來才會收』
實際上對reader來說任何的訊息都是資料,但對我們user來說,只有當valid_data flag是true才代表實際收到真實的Topic sample
好比說Topic sample的status變化,reader是會受影響的
Problem
如果你有一個reader程式是用ANY STATES又不檢查valid_data
因為你的writer只送一次topic sample,所以你會以為你只會印一次hello
但實際上,當writer呼叫dds_instance_dispose
sample的狀態會變成DDS_NOT_ALIVE_DISPOSED_INSTANCE_STATE
對reader來說,這也是資訊,所以ret 會回傳1
所以你就會再印一次hello
Solution :
states不要偷懶用ANY
或者檢查valid_data flag
延伸問題
第二次印hello的情況,如果改成對sample的記憶體操作 ( 例如 印完hello , 做free 或者dds_return_loan)
可能會有問題
沒有留言:
張貼留言