c ++处理队列溢出

时间:2015-11-06 04:53:02

标签: c++ overflow deque

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

std::deque<struct MessageDetails> MsgQueue;

struct MessageDetails{
    char msg[256];
    uint64_t Signature;
    int32_t Id;
    int32_t Mask;
    bool Valid;
};

理想情况下,另一个模块应pop来自此队列的数据并对其进行处理。 但是对于我的代码中的错误处理,如果其他模块没有处理任何数据(或者处理速度太快),那么消息队列大小会不断增加,并且可能会在某个时间点导致溢出。

我想知道什么时候会溢出(分配的大小是多少?),我该如何处理?我有什么错误可以捕获吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试在插入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

答案 1 :(得分:1)

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

queue::max_size