LabVIEW高级队列

      在线性存储的数据结构中,LabVIEW自带的队列也是其中一种,当然LabVIEW创建队列的主要目的是建立各个并行运算模块的消息收发,遵循先入先出,如下图所示,典型的生产消费者架构。

图片

自带的队列数据结构,提供一下操作方法,在后面插入数据、在前面插入数据,在后面取出数据,在实际应用时,有些数据插入的比较晚,但是优先级比较高,需要最早的读出队列,这时自带的数据操作方法无能为力,没有办法解决这样的问题。

图片

带着这样的问题,LabVIEW队列需要优化,在队列数据结构中任意位置插入数据,改变其读出的顺序,保证高优先级的数据先读出,低优先级的数据后读出。如何构建这样高级的LabVIEW队列数据结构?

在上篇文章中提到另外一种线性高级存储结构,双向链表,允许在任意位置插入数据,基于双向链表改造成可以控制读出顺序的高级队列结构,接下来一步步分析。

双向链表数据结构中,节点相互关联,如下图所示,允许在中间位置插入数据。

图片

我们再来回顾下LabVIEW的类LVOOP和数值引用DVRs,如下图所示,LVOOP是簇数据结构的升级,有继承有属性和方法。DVRs是数值引用,是数值地址的传递,操作数据时,避免数据反复复制,节省内存,但要开发者自己管理好内存,创建完数值引用要记得销毁。

图片

在链表任意位置插入数据,上篇文章《LabVIEW双向链表(Linked List)》简单提到过,详细介绍下。创建带有位置属性的类BasicSortedNode,自带存储位置属性,继承LLNode,创建BasicSortedList类自带两个属性存储顺序和搜索位置,继承LinkedList类,入下图所示。

图片

      在链表任意位置插入数据关键是要找到要插入的位置,将迭代器转换BasicSortedNode类,取出位置信息,和迭代器的CurrentSortSearch比较,来找到要搜索的位置,如下图所示。

图片

创建Massage类继承BasicSortedNode类,创建PriorityQueue类继承BasicSortedList类,继承LinkedList类的链表操作方法插入、删除、搜索任意位置的方法,PriorityQueue类还有自己的方法,创建队列、入队列、出队列、销毁队列方法,并具有Trigger属性。

图片

创建队列

       设置队列数据的存储属性,并建立Trigger的发生引用,创建队列数值引用。

图片

任意位置插入队列

        Massage类设置变体属性及优先级位置并创建数值引用,比较优先级写入PriorityQueue,根据位置搜索确定要插入的位置,并设置事件发生Trigger。

图片

数据出队列

图片

      首先判断数值引用是否为空,为空则等待数据插入,发生后读出数据;如果不为空,说明链表中有数据,则在链表中删除首节点(先入先出原则),并将该节点数值转化为Massage类,平化出数据。

图片

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/314141.html

(0)
联系我们
联系我们
分享本页
返回顶部