【问题标题】:How to send data through Matlab Events and Listeners?如何通过 Matlab 事件和监听器发送数据?
【发布时间】:2014-04-22 21:39:50
【问题描述】:

我有一个实时接收信息的代码。每次收到此数据时,我希望它通知另一个对象,该对象具有此事件的侦听器并发送我的第一个应用程序收到的信息。所有这些都是异步的。有什么想法吗?

【问题讨论】:

标签: matlab events asynchronous real-time listeners


【解决方案1】:

假设我有一个我想听的课程“myClass”。首先,我需要write my class with an event

classdef myClass < handle
    properties
        % list of properties
    end 

    events
        myEvent
    end

    methods
        % ... we'll write this in a second!
    end
end

然后,我们构建另一个 类来包含我们想要传递的数据。 This class must inherit from event.EventData:

classdef myEventData < event.EventData
    properties
        A
        B
        C
    end
    methods
        function obj = myEventData(A, B, C)
            obj.A = A;
            obj.B = B;
            obj.C = C;
        end
    end
 end

然后,在您要传递数据的方法中,构造一个myEventData 对象并使用notify 引发事件:

 methods
     function getDataAndNotify(obj)
         [A, B, C] = result_of_processing; 
         eventdata = myEventData(A, B, C);
         notify(obj, 'myEvent', eventdata);
     end
 end

好的,现在您的班级已设置为广播事件。我们怎么听?

使用addlistener设置监听器:

M = myClass;

myListener = addListener(M, 'myEvent', {@myListenerCallback});

您的回调必须至少有两个参数。第一个参数是事件的来源;第二个是事件可能已经传递的任何数据。

function myListenerCallback(obj, eventdata)
    % ...
end

在这种情况下,obj 将是引发事件的 myClass obj,eventdata 将是包含您传递的数据的 myEventData 对象。像访问任何其他对象的属性一样访问数据,即eventdata.Aeventdata.Beventdata.C

【讨论】:

  • 谢谢,如果您可以直接使用 Listener,那就可以了。如果事件是在一个类调用的函数中触发的,而监听器在另一个类的方法中,而触发它的对象并没有在其中创建呢?
  • 您需要在您的监听类中编写一个方法,将事件类作为参数,并在那里分配监听器。基本上你只是在 addlistener 周围制作一个包装函数。
  • 我已经这样做了,谢谢!昨天刚开工!! ;)
  • @DangKhoa,感谢您提供的出色示例。但是,您能否在函数 myListenerCallback 下添加更多内容。欣赏它
猜你喜欢
  • 2011-04-24
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多