2015-11-06 85 views
2

我創建其中將數據放入其定義如下消息隊列線程:C++處理隊列溢出

std::deque<struct MessageDetails> MsgQueue; 

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

理想情況下,其它模塊應該從這個隊列並處理它pop的數據。 但是,對於我的代碼中的錯誤處理,如果其他模塊沒有處理任何數據(或沒有處理得太快),則消息隊列大小不斷增加,並且可能在某個時間點導致溢出。

我想知道它何時會溢出(分配的大小是多少?)以及如何處理?我能捕捉到什麼錯誤嗎?

+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 
+0

我不確定是否可以比較MsQueue.max_size()和MsQueue.size()。如max_size()文檔中所述,它表示: 由於已知的系統或庫實現限制,這是容器可以達到的最大潛在大小,但容器無法保證能夠達到該大小:它仍然可能無法在達到該大小之前的任何時間分配存儲空間。 如果它在達到max_size之前未能分配什麼可以完成? – Namitha

1

如果您有添加到隊列中的項目的計數,您可以看到以下代碼鏈接。

queue::max_size

+0

不能保證容器能夠達到這樣的大小:在達到大小之前,它仍然可能無法在任何時候分配存儲空間。 – Namitha

+0

您可以隨時使用如Akhil(@Akhil Thayyil)答案中提到的try catch塊來捕獲此類異常。 –