我有一個消費者 - 生產者的情況,我經常將數據推入列表中,如果它尚不存在,然後每隔幾秒我打包並將數據發送到服務器。如何使用std :: unique_ptr作爲std :: list變量
目前我有一個線程延遲了幾秒鐘,醒來,設置一個標誌,所以沒有任何東西被添加到列表中,打包,刪除從列表中處理的項目,然後允許程序開始再次添加到列表中。
這對原型來說很好,但現在我需要讓它在更現實的情況下更好地工作。
所以,我想讓生產者獲得信息,並且當尺寸足夠大或足夠長的時間將列表傳遞給要處理的線程。
我想將引用傳遞給列表,並且unique_ptr將會有所幫助,因此一旦它被移動,生產者線程就可以創建一個新列表,並且爲了所有實際目的,可以使用與之前相同的列表。
但是,當我試圖從
typedef list<string> STRINGQUEUE;
STRINGQUEUE newMachineQueue;
改變我的名單
std::unique_ptr<STRINGQUEUE> newMachineQueue;
然後我得到的錯誤,insert
不是std::unique_ptr
成員。
我不認爲我想用newMachineQueue.get()
然後做我的手術,因爲我相信我失去了unique_ptr
的好處。
那麼,如何在列表中使用unique_ptr並能夠調用列表中的方法呢?
哎呀,謝謝。我使用newMachineQueue.insert,因爲我忘了它當前不是指針。 –
@JamesBlack我還添加了一些代碼,可以在不使用'unique_ptr'的情況下執行所需的操作。 – pmr
您的編輯解決了另一個問題,我準備問一下,因爲在嘗試使用unique_ptr調用線程時出現奇怪的錯誤。 Thanx –