2011-10-07 70 views
1

我注意到,當我從帶有* receive()成員函數的Boost message_queue中獲取對象時,該對象仍然在隊列中。所以如果我多次讀取同一個message_queue,即使沒有從另一端插入任何內容,我也會一直收到相同對象的副本。Boost message_queue:當我收到一個對象時,如何從隊列中刪除它?

有沒有辦法從隊列中刪除一個對象,一旦它被讀取?

例如爲:

boost::scoped_ptr<boost::interprocess::message_queue> pMQueue; 

message_queue::remove("myQueue"); 

pMQueue.reset(new message_queue(open_or_create, "myQueue", 100, sizeof(MyClass))); 

MyClass token; 
std::vector<MyClass> tokens; 
size_t recvdSize = 0; 
float timeDelay = 100; // milliseconds 
bool dataAvailable = true; 

// If I do this block twice, I receive the same tokens twice 

while(dataAvailable) 
{ 
    ptime t = microsec_clock::universal_time() + milliseconds(timeDelay); 

    dataAvailable = pMQueue->timed_receive(&token, sizeof(token), recvdSize, 0, t); 

    if(dataAvailable && recvdSize > 0) 
     tokens.push_back(token); 
    else if(recvdSize == 0) 
     break; 
    else if(recvdSize != sizeof(token)) 
     exit(1); 
} 

回答

1

行動,我發現在我的代碼中的錯誤。 message_queue按預期工作,問題在於令牌容器的管理方式。

相關問題