关于这个主题的堆栈溢出有几个问题,但我仍然不清楚:
我知道flash引擎是单线程的,所以当它收到一个事件时,它是否基本上中断,执行任何已注册的事件监听器(无保证顺序)然后返回当前范围?
如果我有这段代码:
addListener("stuff", function():void {
// some stuff
});
addListener("stuff", someFunc);
dispatch(new Event("stuff"));
trace("Done.");
我想知道:
我可以保证,当我到达跟踪(“完成”); 行时,两个侦听器都已执行了吗?
编辑:
或
我可以保证当前函数在任何事件侦听器执行之前完成吗?即追踪(“完成”); 将始终先执行。
或
都不是。
答案 0 :(得分:3)
保证在跟踪之前调用两个事件处理程序,因为用户代码生成的事件是同步的:
Does dispatching an event interrupt a function?
答案 1 :(得分:2)
据我所知,当您调度一个事件时,它会被添加到事件队列中,但在当前执行的事件结束之前不会实际运行。换句话说,你将跟踪“完成。”,然后你的函数结束,控制传递回事件处理程序,然后它(可能)开始执行你的一个事件。
答案 2 :(得分:1)
是的,您可以在这种情况下保证两种断言。 这意味着,如果添加您的事件监听器并调度您的事件在相同的代码块,它将按顺序发生。但是,从实际的POV来看,这是完全没用的。
@kryoko:玩家事件优先于用户事件,但他们并没有“强迫”自己通过。这意味着如果用户代码正在运行,则暂停播放器事件处理。这就是为什么可以使用繁重的密集代码“冻结”flash影片。 (当然,或者使用简单的无限循环)