操作者框架(Actor Framework)正常使用篇1

有人考虑了上篇文章遗留的问题吗?我简单说下自己的想法,用一个容器(比如数组)将多个操作者的消息队列保存下来,然后遍历一遍,一一关闭即可。如果你用一个簇数组,对每个消息队列赋予名字,还可以做到关闭指定操作者的骚操作。

上篇文章讲的用法虽然成功运行了AF程序,但通常使用AF开发程序并不是那么操作的(当然这个东西不绝对,我还是倡导大家根据自身需求,想怎么玩怎么玩)。这次我们讲一讲,在一般情况下,操作者框架是如何去使用的。

为了帮大家快速过渡到下一个阶段,我就直接点吧。到下面这个链接,下载并安装一个操作者相关的扩展包(注意不是非得用这个扩展包,只是用了这个扩展包后对于初学AF有个意料之外的好处,后面会讲到):
https://forums.ni.com/t5/Actor-Framework-Documents/Events-for-UI-Actor-Indicators/ta-p/3869260

网页下面应该是有比较完善的使用方法说明,考虑到有人不喜欢看英文我还是简单讲一下,安装完成后选择工具—>Create Actor from Template,选择UI Template模板,这里其实可以自定义模板,后面我再出一期简单讲(水)一下。

一、初识Events for UI Actor Indicators

随便取个名字(我取名了主控台,大家可以联系一下UI,其实我就是想用Actor搞个主控界面),然后Create Actor。
这时候我们看到了四个vi,其中Destroy User Events.vi是扩展包自己生成的vi,其他的都是“主控台”继承的可重写vi。

这里其实就有一个很妙的点,上篇文章大家还记得吗,Actor提供的可重写的vi贼多,很多人第一次学习的时候,先把所有的可重写vi看了一遍,然后糊里糊涂的。而这个扩展包把常用的可重写vi给拿了出来(虽然这并不是这个扩展包的目的,而是因为这个扩展包帮你创建了一些“逻辑”,而“代价”就是不得不把一些常用的vi给重写了)。

我们直接启动这个操作者,可以看到打开了一个UI界面(Actor Core.vi,这里大家结合一下上篇文章讲的,想一想为什么打开的界面是Actor Core.vi?),而当我们关闭UI界面,这个操作者就被关闭了。

  1. 为什么会打开UI界面(Actor Core.vi)呢?

我们打开Actor Core.vi,在vi属性—>窗口外观—>自定义窗口外观,就可以看到打开UI界面的秘密了,但其实并不是一定要使用这种方式,也可以使用1.“调用节点”、2.“在启动根操作者的打开操作者核心前面板(F)接线端赋值T”。但是第二种方法仅可做调试使用,在“启动根操作者”的help中有写,默认值为FALSE。设置为TRUE将使VI在运行引擎中返回错误。

2. 为什么关闭窗口后会关闭Actor?

打开Actor Core.vi,我们发现,这个扩展包在Actor Core.vi里添加了一些代码,当我把前面板关闭的时候,会给当前操作者发送一个标准停止。


但是大家注意,仅靠这个标准停止并不能结束这个while循环。注意到旁边的动态注册事件了吗?while循环的关闭是靠这个用户事件去实现的。

3. 这个用户事件是怎么工作的?
首先我们先看一下Destroy User Events.vi,他从类的属性里读取事件引用,发送一个True后销毁事件引用。而这个True即关闭了上面讲的while循环。

打开Pre Launch Init.vi,我们发现用户事件最早是放在该vi里创建的,而且它还贴心的写了,当程序错误调用Destroy User Events.vi来释放引用的逻辑。

打开Stop Core.vi,操作者在结束后,会调用一次Destroy User Events.vi来关闭while循环和释放引用。

是不是非常有美感?但还有更牛的,我们接着往下说。

二、建立一个简单的UI界面

我们打开Actor Core,拖一个波形图表,右击波形图表—>add Event Support,然后我们看下程序面板。(注意只有显示控件可以这样操作!)

没错,这个模板帮你全建好了,简直不要太牛。那我们如何往图表里写数据呢?没错,1.写vi,2.然后转换成消息,3.发送消息一气呵成!

由于模板实现帮我们在操作者的属性中添加了事件引用,所以整体写起来就会很方便。

三、实现界面更新

一般来说我们会使用嵌套操作者去更新这个界面,但我又是个比较啰嗦的人,如果使用嵌套操作者,这篇文章可能要写的文字就太多了,所以我还是使用一个最简单的while循环来给界面进行更新,同时也希望提醒大家,不要拘泥于形式,知道原理后大家想怎么写就怎么写。初学者可以想一想为什么我下图的程序会这么去写嘿嘿。

运行一下,还不错哈哈。

最后大家别嫌我写的慢啊,平时工作挺忙的,每天回到家一点想法都没了哎。

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
LabVIEW Actor Framework是一种基于Actor模型的编程框架Actor模型是一种并发计算模型,其中的独立单位被称为Actor,它们可以并行运行,并通过异步消息传递进行通信和协作。 在LabVIEW Actor Framework中,每个Actor都是一个独立的实体,具有自己的状态和行为。每个Actor都可以通过消息队列收发消息,并根据收到的消息执行对应的操作。Actors之间的消息传递是异步的,使得多个Actors可以并行地工作而不会相互阻塞。 LabVIEW Actor Framework提供了一种结构化的方式来设计和实现并发和分布式系统。它充分利用了LabVIEW的数据流和事件驱动的特性,使得多个Actors可以相互通信,共享数据,并协同完成复杂的任务。同时,通过在Actor之间建立层次化的关系,可以实现更加灵活和可扩展的系统架构。 使用LabVIEW Actor Framework,我们可以更加方便地设计和开发高效的并发程序。它提供了一种抽象层,隐藏了底层的多线程处理细节,使得程序员可以更加专注于问题的逻辑和功能实现。此外,LabVIEW Actor Framework还提供了一套强大的调试和监控工具,可以实时查看Actors之间的消息传递和系统的运行状况,帮助我们更好地理解和优化程序的行为。 总之,LabVIEW Actor Framework是一种高效、可扩展的并发编程框架,它为LabVIEW开发者提供了一种简单而强大的方式来设计和实现复杂的并发和分布式系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值