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);
}