代码之家  ›  专栏  ›  技术社区  ›  Archagon

在闪存中延迟事件处理

  •  0
  • Archagon  · 技术社区  · 15 年前

    我想将actionscript中捕获的一些事件的处理延迟到某个时间。现在,我把它们放在一个阵列中,然后在需要的时候进行检查,但这看起来效率很低。有更好的方法吗?

    2 回复  |  直到 12 年前
        1
  •  2
  •   back2dos    12 年前

    对我来说,这似乎是一种干净有效的方法。
    你说拖延是什么意思?你的意思是简单地稍后处理它们,或者在给定的时间之后处理它们?

    始终可以在事件处理程序中为实际处理函数设置Timout(使用 flash.utils.setTimeout ,以便及时准确地处理事件。但这可能会变得效率低下,因为您可能有许多超时需要由运行时处理。

    也许你可以详细说明你的需求。

    编辑:

    基本上,Flash播放器是单线程的-也就是说 字节码执行是单线程的 . 任何被发送的事件都会被立即处理,即 dispatchEvent(someEvent) 将直接调用所有已注册的处理程序(因此称为字节码)。

    现在有一些事件,它们实际上是在后台生成的。这些来自I/O(网络、用户输入)或计时器(时间事件)。在执行字节码时,可能会发生一些实际发生的事件。这通常发生在后台线程中,该线程通过(de)队列将事件(抽象意义上)传递给主线程。

    如果主线程正忙于执行字节码,那么它将忽略这些消息,直到完成为止(注意:几乎所有的字节码执行都是事件的隐式结果(无论是进入帧、输入、计时器、加载操作还是其他操作))。当它处于空闲状态时,它将在所有队列中查找,直到找到可用的消息,将信息包装到actionscript事件对象中,并按前面描述的方式发送它。

    因此,这个排队是一个非常低级的机制,它来自线程到线程的通信(并且出现在许多多线程场景中),您无法访问它。

    但正如我之前所说,你的方法既有效又有意义。

        2
  •  0
  •   Unreality    15 年前

    将它们存储到矢量而不是数组中:p

    我认为这都是关于如何构造程序的,也许您可以在相关实例下分配捕获的事件?因此用它来处理捕获的事件而不是从全局向量进行查询是很自然的