餐饮网站建设教程,余姚网站公司,简单建优化网站无需技术,刚刚济南最新发布文章目录 队列 队列
队列通常情况下是一种先入先出#xff08;FIFO#xff1a;First in First out#xff09;的数据结构#xff0c;常用作数据缓存#xff0c;通过队列结构可以保证数据有序的传递#xff0c;避免竞争和冲突。 案例#xff1a;利用队列#xff0c;模… 文章目录 队列 队列
队列通常情况下是一种先入先出FIFOFirst in First out的数据结构常用作数据缓存通过队列结构可以保证数据有序的传递避免竞争和冲突。 案例利用队列模拟两个通道进行数据采集缓存到队列中最终对队列中的数据取出显示。
在前面板中创建两个波形图表并分别命名为CH1、CH2再放置一个停止按钮在程序框图中选中放置的控件鼠标右键-显示为图标接着放置三个while循环并选中while循环鼠标右键-显示项-子程序框图标签并分别命名为 采集通道 1、采集通道 2、数据显示。 在程序框图中创建一个簇常量并在其中放置字符串常量和DBL数值常量设置其标签分别为name、data。 在程序框图中鼠标右键-同步-队列操作-获取队列引用然后设置其名称为data元素数据类型连接到簇中。 在程序框图中鼠标右键-簇、类与变体-按名称捆绑然后复制创建的簇然后选中创建的簇鼠标右键-将簇显示为图标最后将其与按名称捆绑进行连接然后设置name的值为CH1data的值为随机数x10。 在程序框图中鼠标右键-同步-队列操作-元素入队列并将捆绑的簇连接到元素入队列的元素接线端其队列端连接到获取队列引用的队列输出端错误输出连接到循环条件。最后定时为100ms. 采集通道 2的设置与采集通道 1的相同不同的是name的值为CH2。 在数据显示的while循环中放置一个事件结构并设置事件为100ms在程序框图中鼠标右键-同步-队列操作-元素出队列将其“队列”端连接到队列输出再鼠标右键-簇、类与变体-按名称解除捆绑将其“输入簇”连接到元素出队列的“元素端”这样按名称解除捆绑才能接收到队列中的簇。 在超时事件分支中再放置一个条件循环其选择器线端连接到name中设置好条件分支分别为CH1、CH2并传入data的数据给对应的波形图表。即获取出队列的元素根据name判断是哪个波形图表的数据最后传值。 添加事件分支为 “停止”值改变。在该分支中释放队列引用。 最后的程序展示。 运行结果
结果讨论以上程序中通过使用队列的缓存将数据采集和显示分离开。当我们采集的数据比较快比如1s中采几千个点那么在处理中可能还有经过很多计算处理的速度可能1s中只能处理几百个点那么处理的速度跟不上采集的速度通过队列的缓存就可以处理这种来不及处理的问题。 如果说不用队列进行缓存例如直接在一个循环中对数据进行采集然后处理、显示这时候处理的速度很慢这时候采集就需要等会导致很多数据丢失。通过队列的缓存能有效的解决这种数据丢失的问题即使处理速度很慢但是采集的数据还是会放入队列中不会丢失。