C++ c++;处理队列溢出

C++ c++;处理队列溢出,c++,overflow,deque,C++,Overflow,Deque,我正在创建一个线程,该线程将数据放入消息队列,消息队列定义如下: std::deque<struct MessageDetails> MsgQueue; struct MessageDetails{ char msg[256]; uint64_t Signature; int32_t Id; int32_t Mask; bool Valid; }; std::deque MsgQueue; 结构消息详细信息{ char-msg[256];

我正在创建一个线程,该线程将数据放入消息队列,消息队列定义如下:

std::deque<struct MessageDetails> MsgQueue;

struct MessageDetails{
    char msg[256];
    uint64_t Signature;
    int32_t Id;
    int32_t Mask;
    bool Valid;
};
std::deque MsgQueue;
结构消息详细信息{
char-msg[256];
uint64_t签名;
int32_t Id;
int32_t面具;
布尔有效;
};
理想情况下,另一个模块应该
pop
从此队列中提取数据并对其进行处理。 但是对于我的代码中的错误处理,如果其他模块没有处理任何数据(或者处理得不太快),那么消息队列大小将不断增加,并且可能在某个时间点导致溢出


我想知道它何时会溢出(分配的大小是多少?)以及如何处理?是否有我可以捕获的错误?

您可以在插入dequeu时尝试添加一个try-catch块:

try {
    MsgQueue.insert(xxx)
} catch (std::bad_alloc & e) {
    //Add logic to handle queue overflow
}
你也可以做比较

MsQueue.max_size() and MsQueue.size() 
如果没有足够的容量,请尝试

MsQueue.resize

如果您有已添加到队列的项目计数,则可以从以下链接中查看代码


如果答案解决了您的问题,您必须将其标记正确。我不确定MsQueue.max_size()和MsQueue.size()之间的比较是否有效。正如max_size()文档中所述:由于已知的系统或库实现限制,这是容器可以达到的最大潜在大小,但决不能保证容器能够达到该大小:在达到该大小之前,它仍然可能无法在任何时候分配存储。如果在达到最大大小之前无法分配,可以做什么?不能保证容器始终能够达到该大小:在达到该大小之前,它仍然可以在任何时候分配存储。您可以始终使用Akhil(@Akhil Thayyil)回答中提到的try-catch块来捕获此类异常。