[LabVIEW教程]

为什么我用Labview设计的软件无法及时响应用户操作、容易...

[复制链接]
15459|3
手机看帖
扫描二维码
随时随地手机跟帖
FireworksSH|  楼主 | 2019-8-8 18:42 | 显示全部楼层 |阅读模式
本帖最后由 FireworksSH 于 2019-8-8 18:42 编辑

Labview初学者,甚至一些Labview老用户,常常会发现他们写的程序在某些情况下,例如等待外部设备反馈时、控制执行器作动时、进行大量数据采集时,无法及时响应用户对图形界面上按钮、菜单、图表等控件单击/双击操作。

这样的情况基本都是程序设计不合理导致的,所采用的程序结构不符合实际应用需求。

有些工程师特别偏爱while循环,不管什么任务都采用while循环来解决。一个while循环里放置了好多case结构,任何一个case里的任务执行时间超过用户能接受的最大响应延迟时间,都会导致你设计的软件无法及时响应用户操作。例如下面这个代码,我们以延时代表耗时等长的任务,在5S延时未完成以前,2S延时任务和无延时(立即响应的任务,例如弹出消息、保存简单文本记录、控制数字输出等)任务是不会被响应的。

while with multi cases.png

有些工程师喜欢用事件结构,事件结构(event structure)是一个成熟和高效的用户操作处理结构。如果每个事件中处理的任务耗时很短,例如1秒之内就能解决掉,基本不会让用户感觉到软件响应不及时。但是如果事件中处理的任务耗时很长,超过了用户能接受的最大响应延迟时间,那么就存在同上面说的while循环一样的问题。在这个耗时长的任务完成之间,用户单击软件界面上的按钮不会有任何反应,并可能造成软件无响应;在耗时长的任务完成之后,之前单击按钮对应的事件才会被响应,而且前面多次单击会被多次响应,这种情况往往会造成一些意外发生。例如在下面的程序中,我们先单击Delay10S按钮,然后单击两次Pop Message按钮,你就可以看到上文描述的情况。

Event Structure User Operation Response Sample.gif
Event Structure User Operation Response Sample-UI.gif

那么类似这样的,对用户操作不及时响应的问题,是否可以解决呢?答案是当然可以解决的。

用多线程与Labview提供的一些设计模式(例如Master-Slave、Producer-Consumer等)结合起来可以完美解决上文描述的问题。


苏香农将把“Labview多线程”这个主题分五次与大家分享、交流。欢迎微信订阅“传感测控物联网”获得相关知识。

219655d4bfa20d5463.png



使用特权

评论回复

相关帖子

hcwzchen| | 2019-8-9 08:31 | 显示全部楼层
呵呵,广告贴啊

使用特权

评论回复
FireworksSH|  楼主 | 2019-8-9 15:02 | 显示全部楼层
hcwzchen 发表于 2019-8-9 08:31
呵呵,广告贴啊

良心推荐哦

使用特权

评论回复
发烧友321| | 2021-8-25 10:19 | 显示全部楼层
额,这广告打的。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

43

帖子

0

粉丝