2015-04-07 48 views
-3

我想對我的隊列設置限制。您可以在下面找到Queue類的實現。在隊列中設置限制

所以,總之,我想在隊列中寫入一個線程,直到達到極限,然後等待可用空間。第二個線程讀取隊列並使用它接收的數據執行一些操作。

int main() 
{ 
    //loop that adds new elements to the Queue. 
    thread one(buildQueue, input, Queue); 

    loop{ 
     obj = Queue.pop() 
     func(obj) //do some math 
    } 



} 

所以問題是,隊列建立,直到結束,但我想只設置10個元素,例如。程序應該像這樣工作:

  1. 檢查隊列中的可用空間是否可用。
    1. 如果沒有空間 - 等待。
    2. 寫入隊列直到限制。

類隊列

template <typename T> class Queue{ 
private: 
    const unsigned int MAX = 5; 
    std::deque<T>   newQueue; 
    std::mutex    d_mutex; 
    std::condition_variable d_condition; 
public: 
    void push(T const& value) 
    { 

     { 
      std::unique_lock<std::mutex> lock(this->d_mutex); 
      newQueue.push_front(value); 
     } 
     this->d_condition.notify_one(); 
    } 
    T pop() 
    { 
     std::unique_lock<std::mutex> lock(this->d_mutex); 
     this->d_condition.wait(lock, [=]{ return !this->newQueue.empty(); }); 
     T rc(std::move(this->newQueue.back())); 
     this->newQueue.pop_back(); 
     return rc; 
    } 

    unsigned int size() 
    { 
     return newQueue.size(); 
    } 

    unsigned int maxQueueSize() 
    { 
     return this->MAX; 
    } 

}; 

我很新的線程程序,這樣我可以誤解的概念。這就是爲什麼不同的提示高度讚賞。

+2

這與「爲我寫代碼」有什麼不同?實際問題在哪裏? – Griwes

+2

我投票結束這個問題,因爲SO用戶不是你的機器人:) –

回答

0

你應該研究MSDN website中的Queue類。它提供了Queue中包含的大量信息循環方法。然而,具體回答你的問題,設置隊列與特定的能力,這將是如下:

Queue(int capacity) 

它是類型System::int32能力隊列元素的初始數量。然後,你的隊列將被填滿,直到限制。問題是,隊列一旦填滿就不會「停止」。它將開始分配更多的內存,因爲這是它的本質,所以在你的線程中(或者它的聲音中的多線程),你必須確保根據時序來處理隊列內存的實時解除分配。您應該能夠確定用所需容量填充您的隊列所需的毫秒數,並讀取隊列,同時清除隊列。同樣,您可以將隊列內容複製到1D陣列,並使用MyQueue->Clear()完成隊列清除,而不必逐個讀取隊列元素(如果時序和代碼複雜性是個問題)。