【问题标题】:Matlab: OOPS : Event Block: Dynamically (Programmatically) adding events at run-timeMatlab:OOPS:事件块:在运行时动态(编程)添加事件
【发布时间】:2012-12-12 09:07:50
【问题描述】:

我正在尝试编写一个 matlab 类,它接受对财务数据的请求,然后通过触发事件异步提供数据。整个逻辑可以定义如下。

1) 使用回调函数句柄 (@func) 获取安全 (SecId) 数据请求

2) 添加一个事件名称为“evnt_SecId”和回调函数@func的监听器。

3) 收集所有数据,按证券过滤它们并触发特定证券的特定事件。

除了我不能动态定义事件之外,现在在 Matlab 中一切似乎都很容易和可行。目前,我必须为 { events ... end } 块中的每个 SecId 定义事件。

有谁知道在请求到达时动态声明事件的方法?

我想到的替代解决方案:我可以有一个更新“事件”和与之关联的所有侦听器,而 SecId 的过滤发生在回调中。由于性能原因,此解决方案是不可接受的。

【问题讨论】:

    标签: matlab events dynamic


    【解决方案1】:

    这个怎么样:

    1. 使SecId成为dynamicprops的子类
    2. 不是添加常规监听器,而是添加一个 PostSet propListener 并动态添加一个 新楼盘
    3. 通过设置属性值发送消息。

    我不知道该解决方案的性能特征,但它可能会满足您的需求。

    【讨论】:

    • 我喜欢这种处理事件的方式。但是,我也有想要传输到侦听器回调的 eventData。对于属性事件,我无法控制 eventData,对吧?
    • 找到了一种更简单的方法:与其通过不同的事件来处理不同的事件侦听器,更好的方法是拥有单个公共事件,但让多个对象与每个 SecId 关联。甚至不需要通过动态属性路由,因为无论如何我都会管理所有 SecId 对象的列表。非常感谢 Sam 对此提供指导。
    • 听起来您找到了更好的解决方案。仅供参考,如果您想执行 dynamicprops 和 propListener 路由 - 您是对的,您无法控制事件数据,但您可以使用您正在设置的属性的值。
    【解决方案2】:

    在“master”事件触发方法中过滤SecId怎么样?这样过滤只会在每个触发事件发生一次。该类必须将其拥有的侦听器与其注册的 SecId 相关联。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 2010-12-04
      相关资源
      最近更新 更多