matlab中addlistener参数中的函数句柄

最近有个项目需要实时的传输并计算一些数据,为了缩短时间,打算用一个定时器接受数据,数据更新后调用响应函数计算。

matlab的定时器类网上有很多介绍,但是addlistener这个函数提到的不多,它可以创建绑定到事件源的事件侦听程序。官方说明中有两个调用方式

创建绑定到事件源的事件侦听程序 - MATLAB- MathWorks 中国此 MATLAB 函数 为源对象 hSource 上触发的事件 EventName 创建侦听程序。icon-default.png?t=M276https://ww2.mathworks.cn/help/matlab/ref/handle.addlistener.html

el = addlistener(hSource,EventName,callback) 为源对象 hSource 上触发的事件 EventName 创建侦听程序。

如果 hSource 是数组,侦听程序将响应 hSource 数组中任何对象上的指定事件。callback 是引用回调函数的函数句柄。

el = addlistener(hSource,PropertyName,EventName,callback) 为某个预定义的属性事件创建侦听程序。有四个预定义的属性事件:

事件名称事件发生
PreSet在设置属性值之前、调用它的 set 访问方法之前立即触发
PostSet在属性值设置之后立即触发
PreGet在提供属性值查询服务之前、调用它的访问方法之前立即触发
PostGet在将属性值返回到查询后立即触发

 这里并没有说明callback函数需要传入参数的方法,它也不能像定时器一样通过{@myf, arg1, arg2}来使用,网上找半天没找到,因为我是在matlab中的app designer中使用,函数调用必须得有app对象 ,自己用的函数句柄总是出错,后来通过listener才找到具体用法。

Listener Callback Syntax- MATLAB & Simulink- MathWorks 中国Specify listener callbacks using function handles.icon-default.png?t=M276https://ww2.mathworks.cn/help/matlab/matlab_oop/listener-callback-functions.html

Here is the syntax for an ordinary method. The input arguments (arg1,...argn) must be defined in the context in which you call addlistener.

lh = addlistener(src,'EventName',@(src,evnt)obj.callbackMethod(src,evnt,arg1,...argn)

Use varargin to define the callback function.

function callbackMethod(src,evnt,varargin)
   arg1 = varargin{1};
   ...
   argn = varargin{n};
   ...
end

src和evnt好像是必须的,我在app的methed中定义了函数mylistener将app作为最后参数又传了一边,因为作为第一个参数好像不能访问。

%调用的函数
function mylistener(~,~,~,varargin)
            aL1 = varargin{1};
            acamMatrix1 = varargin{2};
            assize = varargin{3};
            acolor_RGB = varargin{4};
            aa = varargin{5};
            reproj_auto(aL1,acamMatrix1,assize,acolor_RGB,aa);
 end

%建立侦听
addlistener(app,'x','PostSet',@(src,evnt)app.mylistener(app,evnt,L1,camMatrix1,ssize,color_RGB,app));

另外:x属性需要声明为SetObservable。

    properties (SetObservable) 
        x
        y
    end

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值