静态事件与动态事件的管理

并非所有事件都需要参数或参数会发生变化。例如游戏中周期性的时间事件或玩家触发的按键事件,这类事件对象可以安全地共享并静态分配,无需每次动态创建和回收。

“零复制”事件派发机制可以轻松容纳静态事件,方法是不对其进行管理。所有静态事件必须拥有唯一标识,以便垃圾收集器忽略它们。相反,动态分配的事件也必须拥有唯一标识,表明它们是需要框架管理的动态事件。应用程序以相同的方式使用静态和动态事件,唯一的区别在于静态事件并非动态分配。

在发布-订阅机制中,多个活动对象订阅同一个信号的情况很普遍。实时框架需要将同一事件的多份副本同时传输给所有订阅它的活动对象,类似于报纸发行商向所有订阅者发送相同的报纸副本。

发送同一事件的多个副本与“零复制”事件派发机制不兼容。实际上,并不需要生成事件的多个副本,因为所有订阅者可以接收指向同一事件的指针。问题是如何得知最后一个活动对象何时完成对事件的处理,以便回收该事件。

一个简单的方法是使用标准的引用计数器算法。每个动态事件对象内部维护一个对其外部引用的计数器。事件创建时,计数器从零开始。

pdf 文件大小:4.33MB