我想在ActionScript中延迟处理一些捕获的事件,直到某个时间。现在,我在捕获时将它们粘贴在一个数组中,并在需要时通过它,但这似乎效率低下。有更好的方法吗?
答案 0 :(得分:2)
嗯,对我而言,这似乎是一种干净而有效的方式 延迟是什么意思?你是指稍后处理它们,还是在给定时间后处理它们?
您始终可以在事件处理程序中设置实际处理函数的时间(使用flash.utils.setTimeout
),以便在精确的时刻处理事件。但是这可能会变得效率低下,因为你可能会有很多超时,这需要由运行时来处理。
也许你可以多指出一下你的需求。
修改强>
好的,基本上,flash player是单线程的 - 字节码执行是单线程的。并且任何已发送的事件都会立即处理,即dispatchEvent(someEvent)
将直接调用所有已注册的处理程序(因此为AS字节码)。
现在有些事件实际上是在后台生成的。它们来自I / O(网络,用户输入)或定时器(TimerEvents)。可能会发生这些事件中的一些实际发生,而字节码被执行。这通常发生在后台线程中,后台线程通过(de)队列将事件(在术语的抽象意义上)传递给主线程。
如果主线程忙于执行字节码,那么它将忽略这些消息,直到完成为止(注意:几乎任何字节码执行总是事件的隐含结果(无论是输入帧,输入,还是定时器或加载)操作或其他))。当它处于空闲状态时,它将查找所有队列,直到找到可用消息,将信息包装到ActionScript事件对象中,然后按照前面的描述进行调度。
因此,这种排队是一种非常低级别的机制,它来自线程到线程的通信(并出现在许多多线程场景中),并且您无法访问。
但正如我之前所说,你的方法既有效又有意义。
答案 1 :(得分:0)
将它们存储到Vector而不是Array:p
我认为这完全取决于你如何构建程序,也许你可以在相关实例下分配捕获的事件?因此,用它来处理捕获的事件而不是从全局向量中查询是很自然的