- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、ActorFramework (操作者框架) 的基本结构
Actor Framework (操作者框架)模板创建的LabVIEW 应用程序可包含多个
需要互相进行通信的独立任务。该框架专门设计用于解决常见开发情形中遇到的
问题:扩展功能或添加其他处理时需要大量复制代码。
LabVIEW 使用面向对象的技术实现了Actor Framework (以后简称AF)。
Actor Framework.lvlib 中包含了实现AF 框架的所有类,这些类可分为三部分:
Actor、Message、Queue. 如下图所示:
Actor 部分包含Actor.lvclass,它是AF 框架的核心,负责启动并初始化用户
创建的Actor (操作者),监视Actor 的MessageEnqueuer,若有Message,则取
出Message,根据Message 的类型去执行相应的操作。下面为Actor 的类示意图:
Message 部分包含Message.lvclass、Stop Msg.lvclass、LastAck.lvclass、Launch
NestedActor Msg.lvclass.Message 类定义了Actor 能够发送或接收的Message 类
型以及Message 被Actor 接收时做出的动作。Message 类之间的关系如下图所示:
用户可以创建自己的Actor,并且可以为Actor 的方法创建相应的消息类,
这些消息类都继承于Message.lvclass.
Queue 部分包含Message Priority Queue.lvclass、Message Enqueuer.lvclass、
MessageDequeuer.lvclass、MessageQueue.lvclass 四个类。Queue 部分的主要任务
是为Actor 创建队列,并提供方法用于完成消息出队和入队操作。Queue 部分中
类之间的关系如下:
MessagePriority Queue 类是这四个类中最基本、最复杂的类,它完成了所有
与消息队列有关的操作。例如:Obtain Priority Queue()方法初始化并返回一个
MessagePriority Queue 对象,该对象的属性包含了关于消息队列的信息 (从类图
中可以看出);Priority Enqueue()方法把消息对象以及该消息对象的优先级 (优
先级数据类型为I32 数值型)作为输入参数,按照输入的优先级将消息对象放入
相应的消息队列里面;PriorityDequeue()方法从消息队列中取出一个消息对象;
Flush()方法清空Buffers 里面的所有消息队列;ReleasePriority Queue()方法释放
MessagePriority Queue对象属性里面的所有队列。
剩下三个类都将MessagePriority Queue 类作为自己的私有数据,实际上这
三个类都调用MessagePriority Queue 类中的方法来完成自己的某些方法 (这些
方法通常非常重要)。可以这样说,MessagePriority Queue 类完成了所有重要的
底层工作,其他三个类只不过包装并调用了MessagePriority Queue 类以及它的
方法。
二、Actor (操作者)的启动过程
自LabVIEW2015版本开始,用户可以在项目里面通过右键方式直接创建一
个操作者 (Actor),而在此之前,用户必须手动创建一个类,并且让这个类继
承Actor Framework.lvlib 里面的Actor 类,这样才能创建一个操作者。所以说,
现在利用ActorFramework 框架编程更加方便了。
我们知道,用户创建的操作者本质上就是ActorFramework.lvlib里面的Actor
类的子类。既然是类,就会有自己的属性与方法。操作者的一个方法代表了该操
作者能够处理的一个任务,操作者通常在等待其他操作者给他发送消息,一旦操
作者收到了一个消息,那么它就会根据消息的类型去调用自身相应的方法(该方
法用于完成一个特定的任务)。可以把操作者理解为一个等待消息并且根据消息
的类型去完成相应任务的士兵。
要想让用户创建的操作者运转起来,那么必须要启动这个操作者。LabVIEW
函数选板→数据通信→操作者框架→启动根操作者函数用于启动一个操作者,实
际上这个函数就是Actor Framework.lvlib 里面的Actor 类的一个公共方法,并且
文档评论(0)