荣小菜补钙记第34期:基于 labview Actor Framework的连续测量和记录系统2 同步更新于 WeChat:荣小菜在补钙 大家好,我是荣小菜,也可以叫我Richie,本期继续讲基础,讲的是AF使用中的一个重点-嵌套操作者的消息上传。本期内容相对枯燥,但很关键(堪比队列之于状态机),本期适合跟随源代码Demo静心研读分析。 1. 简介 操作者向下传递消息给嵌套操作者是很简单的,方式比较固定。而向上传递消息给调用操作者则有多种方式。 2. 传递方式 (1) 创建调用者抽象消息: 优点:和调用者无关,耦合小,子操作者易复用,父操作者代码简单。 缺点:父操作者的消息类会继承子操作者抽象消息,复用时会向下耦合子操作者,不过一般来说父操作者都会耦合子操作者。若解耦,需要先解除抽象消息的继承关系,这一点当抽象消息较多时就很麻烦。
上一期我说官方自带的Demo不是很好的原因就是操作者间耦合太大。 (2) 触发调用者的用户事件: 优点:操作者间无耦合(耦合点在同一个用户事件),均可独立复用。 缺点:是父操作者代码较复杂,必须开循环等待用户事件,而若用户事件执行后想传参至实时操作者类中需要额外发消息。此外,调用方要初始化用户事件并在调用嵌套操作者前将用户事件写入。 (3) 控件引用或数值引用:和(2)类似,但控件引用传值较慢,还会导致内存占用,降低运行速度。数值引用在传递大数据时是一种可选择项,但没有队列那么多功能,要合理规划谨慎使用。 (4) 队列:常规方法,不再多说。 3. 总结 方法(1)和(2)都是比较好的方式,相对而言,方法(1)的代码相当简便,而其缺点也可以通过合理设计进行一定程度的规避。我在Demo中进行了展示,Beta操作者利用方法(1)不断向上传递消息,当需要模仿Beta建立Beta2时及更多时,若直接继承Beta2,Beta的抽象方法可以被Beta2使用,这样当我们建立Beta2,3,4等更多相似操作者时,只需要继承Beta,复用其抽象消息,就可以避免一个Beta建立一个抽象消息的缺点。 也有人说用一个操作者去继承另一个操作者不合适(虽然我也不知道到底怎么不合适,求指点),其实如果不继承,可完全没问题。归根结底,上传消息的关键就是调用者和被调用者的Msg类及其继承关系。此时我们完全可以更灵活一点,将Msg抽象类及其方法单独拿出来,让Beta2,3,4等等直接使用即可。 感兴趣的同学可以修改Beta2继承于Actor,在Beta2的类私有数据中放入“上传状态消息类”,之后就和Beta同样使用即可。
源代码:
代码主要为了展示上传消息的方式,Alpha操作者已经屏蔽使用(上一期用的Alpha)。仅看Beta及其相关操作者及代码即可。 Actor Framework,期望各位大神分享更多实用资料^_^
|