c++处理队列溢出



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

std::deque<struct MessageDetails> MsgQueue;
struct MessageDetails{
    char msg[256];
    uint64_t Signature;
    int32_t Id;
    int32_t Mask;
    bool Valid;
};

理想情况下,另一个模块应该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

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

队列::max_size

最新更新