C++处理队列溢出
我创建其中将数据放入其定义如下消息队列线程: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
我不确定是否可以比较MsQueue.max_size()和MsQueue.size()。如max_size()文档中所述,它表示: 由于已知的系统或库实现限制,这是容器可以达到的最大潜在大小,但容器无法保证能够达到该大小:它仍然可能无法在达到该大小之前的任何时间分配存储空间。 如果它在达到max_size之前未能分配什么可以完成? – Namitha
如果您有添加到队列中的项目的计数,您可以看到以下代码链接。
不能保证容器能够达到这样的大小:在达到大小之前,它仍然可能无法在任何时候分配存储空间。 – Namitha
您可以随时使用如Akhil(@Akhil Thayyil)答案中提到的try catch块来捕获此类异常。 –
如果答案解决您的问题,你必须正确标注它。 –