我想对我的队列设置限制。您可以在下面找到Queue类的实现。
因此,简而言之,我想在一个线程中写入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
}
}
所以问题是Queue构建到最后,但我想只设置10个元素,例如。程序应该像这样工作:
班级队列
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;
}
};
我在线程程序方面很新,所以我可能会误解这个概念。这就是为什么不同的提示被高度赞赏的原因。
答案 0 :(得分:1)
您应该在MSDN website中研究过Queue类。它提供了Queue附带的广泛的信息循环方法。但是,要专门回答您的问题,要设置具有特定容量的队列,请执行以下操作:
Queue(int capacity)
类型System::int32
容量是队列中元素的初始数量。然后,您的队列将被填充,直到达到限制。问题是,一旦填满,队列就不会“停止”。它将开始分配更多的内存,因为它本质上是在你的线程中(或由它的声音多线程),你必须确保根据时间处理队列内存的realoc-deallocation。您应该能够确定以所需容量填充队列所需的毫秒数并读取队列,同时清除队列。同样,您可以将队列内容复制到1D阵列,并使用MyQueue->Clear()
清除完整队列,而无需逐个读取队列元素(如果时间和代码复杂性是个问题)。