Boost message_queue:当我收到一个对象时,如何将其从队列中删除?

Boost message_queue:当我收到一个对象时,如何将其从队列中删除?,boost,message-queue,Boost,Message Queue,我注意到,当我从带有*receive()成员函数的Boost message_队列中获取对象时,该对象仍保留在队列中。因此,如果我多次读取同一消息队列,我会不断获取相同对象的副本,即使从另一端没有插入任何内容 是否有一种方法可以在读取对象后将其从队列中移除 例如: boost::作用域的ptr pMQueue; 消息队列::删除(“myQueue”); 重置(新消息队列(打开或创建“myQueue”,100,sizeof(MyClass)); MyClass令牌; std::向量标记; 大小\u

我注意到,当我从带有*receive()成员函数的Boost message_队列中获取对象时,该对象仍保留在队列中。因此,如果我多次读取同一消息队列,我会不断获取相同对象的副本,即使从另一端没有插入任何内容

是否有一种方法可以在读取对象后将其从队列中移除

例如:

boost::作用域的ptr pMQueue;
消息队列::删除(“myQueue”);
重置(新消息队列(打开或创建“myQueue”,100,sizeof(MyClass));
MyClass令牌;
std::向量标记;
大小\u t recvdSize=0;
浮动时间延迟=100;//毫秒
bool dataAvailable=true;
//如果我两次执行此块,我将收到两次相同的令牌
while(数据可用)
{
ptime t=微秒时钟::通用时间()+毫秒(时间延迟);
dataAvailable=pMQueue->timed_receive(&token,sizeof(token),recvdSize,0,t);
如果(dataAvailable&&recvdSize>0)
代币。推回(代币);
else if(recvdSize==0)
打破
else if(recvdSize!=sizeof(令牌))
出口(1);
}

Ops,我在代码中发现了一个bug。消息队列按预期工作,问题在于令牌容器的管理方式。

Ops,我在代码中发现了一个错误。消息队列按预期工作,问题在于令牌容器的管理方式

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