c ++处理队列溢出
c++ Handling queue overflow
我正在创建一个将数据放入定义如下的消息队列的线程:
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
如果您有已添加到队列中的项目的计数,您可以查看以下代码link。
我正在创建一个将数据放入定义如下的消息队列的线程:
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
如果您有已添加到队列中的项目的计数,您可以查看以下代码link。