【发布时间】:2014-04-22 21:39:50
【问题描述】:
我有一个实时接收信息的代码。每次收到此数据时,我希望它通知另一个对象,该对象具有此事件的侦听器并发送我的第一个应用程序收到的信息。所有这些都是异步的。有什么想法吗?
【问题讨论】:
-
我已经去过那里了......没有帮助!
标签: matlab events asynchronous real-time listeners
我有一个实时接收信息的代码。每次收到此数据时,我希望它通知另一个对象,该对象具有此事件的侦听器并发送我的第一个应用程序收到的信息。所有这些都是异步的。有什么想法吗?
【问题讨论】:
标签: matlab events asynchronous real-time listeners
假设我有一个我想听的课程“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.A、eventdata.B、eventdata.C。
【讨论】:
addlistener 周围制作一个包装函数。