《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 1591|回复: 0
收起左侧

[样章] 8.2.3 如何响应事件(听众的定义)

[复制链接]
发表于 2014-7-10 11:20:25 | 显示全部楼层 |阅读模式
本帖最后由 zhanggx 于 2014-7-10 13:58 编辑

一旦某事件被触发,由谁来收听这个消息呢?上一小节中给出了触发事件的方法,但某事件的发生还需要产生相应的响应动作,这就需要定义听众,由听众来调用某一个方法,做出相应的动作来响应该事件。定义听众的一般方法是用handle类中的成员函数addlistener完成。addlistener函数的原型如下:
lh = addlistener(Hsource,'EventName',callback)

lh= addlistener(Hsource,property,'EventName',callback)
这里的第一个函数用来为指定的事件创建一个听众,而第二个函数用来为MATLAB中预定义的事件创建一个听众。参数Hsource是发生事件的对象句柄,也可以是对象数组的句柄;参数EventName是Hsource所指对象中的事件名称;参数callback是函数句柄,即事件触发时将执行的函数。返回值lh是event.listener类型的听众对象句柄,用来表示一个听众。例如,在MClockFun类中一个定义听众的代码如下:
classdef   MClockFun < handle          %时钟功能类
     properties
         ListenerHandle  %听众句柄
     end
     methods
       function obj = MClockFun(MClock_obj)
          hl =
addlistener(MClock_obj,'Alarm',@MClockFun.listenMyEvent);  %创建听众
          obj.ListenerHandle = hl;   
       end
     end
     methods(Static = true)
       function listenMyEvent(obj,src,evnt)
           disp('响应事件Alarm了');         %用来检验该函数是否调用
       end
     end
end
这里MClockFun类的构造函数中定义了一个与MClock类中事件Alarm关联的听众,并将这个听众的句柄放置在ListenerHandle中,与此同时将该事件与回调函数listenMyEvent进行绑定。
现在可以来检验事件触发和事件响应的过程了。在MATLAB命令窗口中输入如下命令:
>>T=MClock;
>>TF=MClockFun(T);
>>T.AlarmSetChange(1);  %这里改变Enable的值
第一条命令表示定义一个MClock类对象T,是一个发生事件的对象;第二条命令表示定义一个MclockFun类对象TF,并将对象T通过构造函数传递给TF;第三条命令是通过T的成员函数AlarmSetChange来触发事件Alarm。这样TF中的听众ListenerHandle便会调用函数listenMyEvent。
其运行结果为:
响应事件Alarm了
如果想终止一个听众的生命期,即删除该听众,可以用delete函数来实现,如:
>>delete(lh)
这时,将从MATLAB工作空间中移除该听众对象。
MATLAB面向对象程序设计-海报.png
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号-2 

GMT+8, 2022-12-5 21:49 , Processed in 0.055209 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表