【发布时间】:2020-07-09 10:08:08
【问题描述】:
注意:这里的问题专门针对Matlab的情况!
这个问题的上下文是一个 Matlab 句柄类,它通过 websocket 接收一些数据,对该数据进行一些处理,然后将数据转发给其他一些类,这些类使用回调注册自己。
这个类的简化版本如下:
classdef ReceiverWebsocket < WebSocketClient
properties (Access = private)
dataReceivers_ % Stores the callback functions and their desired rate
end
methods
function obj = ROSReceiverWebsocket(TOPIC, URI, varargin)
obj = obj@WebSocketClient(URI, varargin{:});
obj.dataReceivers_ = containers.Map;
end
function registerReceiver(obj, name, rate, callback)
cb.name = name;
cb.callback = callback;
obj.dataReceivers_(name) = cb;
end
% Implement the abstract callback functions
function onTextMessage(obj,message)
data = jsondecode(message);
for key = keys(obj.dataReceivers_)
cb = obj.dataReceivers_(cell2mat(key));
cb.callback(data);
end
end
end
end
在研究如何在 Matlab 中实现这样的功能时,我还遇到了event listeners and notifyers in Matlab 的概念。
据我了解,可以使用句柄类事件重新实现上述功能,然后在onTextMessage(...) 函数中调用notify(...),而不是直接调用回调函数。
我现在的问题是,如果有的话:
- 与直接回调相比,使用事件侦听器功能有什么好处?
- 使用直接回调有什么缺点吗?
我尤其无法找到有关通知事件回调如何执行的任何信息,包括执行顺序、任何执行延迟甚至在不同线程中的执行。
【问题讨论】: