- 在线时间
- 1084 小时
- 最后登录
- 2015-9-10
- 注册时间
- 2014-4-18
- 听众数
- 162
- 收听数
- 1
- 能力
- 10 分
- 体力
- 43976 点
- 威望
- 6 点
- 阅读权限
- 255
- 积分
- 15250
- 相册
- 0
- 日志
- 0
- 记录
- 1
- 帖子
- 3471
- 主题
- 2620
- 精华
- 1
- 分享
- 0
- 好友
- 513
升级   0% TA的每日心情 | 开心 2015-3-12 15:35 |
---|
签到天数: 207 天 [LV.7]常住居民III
 群组: 第六届国赛赛前冲刺培 群组: 国赛讨论 群组: 2014美赛讨论 群组: 2014研究生数学建模竞 群组: 数学中国试看培训视频 |
一旦某事件被触发,由谁来收听这个消息呢?上一小节中给出了触发事件的方法,但某事件的发生还需要产生相应的响应动作,这就需要定义听众,由听众来调用某一个方法,做出相应的动作来响应该事件。定义听众的一般方法是用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工作空间中移除该听众对象。
|
zan
|