在“队列”中设置限制
Set the limit in Queue
我想对我的队列设置一个限制。您可以在下面找到Queue类的实现。
所以,简而言之,我想在一个线程中写入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
}
}
因此,问题是队列一直构建到最后,但例如,我只想设置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;
}
};
我对线程程序很陌生,所以我可能会误解这个概念。这就是为什么不同的提示会受到高度赞赏。
您应该研究MSDN网站中的Queue类。它提供了Queue中包含的广泛的信息循环方法。然而,要具体回答您的问题,要设置具有特定容量的队列,它将是以下内容:
Queue(int capacity)
其中它是类型CCD_ 1 capacity是队列中元素的初始数量。然后,您的队列将被填满,直到达到极限。问题是,队列一旦填满就不会"停止"。它将开始分配更多的内存,因为这是它的本质,所以在你的线程化(或听起来是多线程的)中,你必须确保根据时间来处理队列内存的realoc释放。您应该能够确定用所需容量填充队列并读取队列所需的毫秒数,同时清除队列。同样,您可以将队列内容复制到1D数组中,并使用MyQueue->Clear()
执行完整的队列清除,而不必逐个读取队列元素1(如果时间和代码复杂性是个问题)。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- boost::进程间消息队列引发错误
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- Android NDK传感器向事件队列报告奇怪的间隔
- 如何在自删除后将对象设置为nullptr
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 将指针设置为"nullptr"并不能防止双重删除?
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 设置 ACL,指定允许在请求队列上接收 I/O 的工作进程
- 如何在类构造函数中设置 STL 队列的大小
- 在“队列”中设置限制
- 使用Boost Asio设置发布队列大小的限制
- 你能把队列设置为相等吗
- C++ 我在设置我创建的类的优先级队列时遇到问题
- 如何设置未来的添加到队列从另一个线程在Cython的结果