I'm looking for some information about queue's and memory usage that I don't fully understand.
If you use a queue in a state machine, producer/consumer style VI with a cluster that gets enqueued in the state machine and dequeued in a consumer loop, does the queue hold data after it has been dequeued, or does it "flush itself" of that dequeued data so it is ready to have more data enqueued?
Example: If I enqueue data points (doubles) 1, 2, 3, 4, 5 in a cluster, they get dequeued in the consumer loop in order 1,2,3,4,5. When I enqueue the next data, say 6, 7, 8, 9, 10 is it now only those new 5 data points in the queue because I dequeued 1,2,3,4,5 or am I still holding onto 1,2,3,4,5 and now adding 6, 7, 8, 9, 10, so my whole queue is 1,2,3,4,5,6,7,8,9,10 ? Does a queue empty itself upon dequeuing? Because I don't want to accidently build this giant queue that is keeping all the data that has ever been enqueued while the VI is running.
I apologize if I'm not articulating this well.
Solved! Go to Solution.
Yes, when you dequeue an element it's taken off the queue for good. You can "inspect queue" if you want to see what is on the queue without taking elements off, but I don't think I've ever used that in an application.
Thanks for that info Gregory!
That's sort of what I thought, but I just wasn't exactly sure, especially when I saw the Flush Queue Function. I thought maybe you had to "manually" do it by using this function.
Actually, I do have a specific use case where I inspect a queue and pull the array of elelments out. If I am keeping a a list of the last X events/data points/whatever, I will use a fixed size queue of size X and use the Lossy Enqueue to add the latest element. This is a quick and easy way to get a circular buffer. The elements preserve the order that they were enqueued and I don't have to keep track of an insert index if I were to do this myself using an array.