我可以保证所有听众在派遣活动后都在下一行执行了吗?

时间:2009-12-16 00:18:40

标签: flex actionscript-3 event-handling

关于这个主题的堆栈溢出有几个问题,但我仍然不清楚:

我知道flash引擎是单线程的,所以当它收到一个事件时,它是否基本上中断,执行任何已注册的事件监听器(无保证顺序)然后返回当前范围?

如果我有这段代码:

addListener("stuff", function():void {
     // some stuff
});
addListener("stuff", someFunc);
dispatch(new Event("stuff"));
trace("Done.");

我想知道:

我可以保证,当我到达跟踪(“完成”); 行时,两个侦听器都已执行了吗?

编辑:

我可以保证当前函数在任何事件侦听器执行之前完成吗?即追踪(“完成”); 将始终先执行。

都不是。

3 个答案:

答案 0 :(得分:3)

保证在跟踪之前调用两个事件处理程序,因为用户代码生成的事件是同步的:
Does dispatching an event interrupt a function?

答案 1 :(得分:2)

据我所知,当您调度一个事件时,它会被添加到事件队列中,但在当前执行的事件结束之前不会实际运行。换句话说,你将跟踪“完成。”,然后你的函数结束,控制传递回事件处理程序,然后它(可能)开始执行你的一个事件。

答案 2 :(得分:1)

是的,您可以在这种情况下保证两种断言。 这意味着,如果添加您的事件监听器并调度您的事件在相同的代码块,它将按顺序发生。但是,从实际的POV来看,这是完全没用的。

@kryoko:玩家事件优先于用户事件,但他们并没有“强迫”自己通过。这意味着如果用户代码正在运行,则暂停播放器事件处理。这就是为什么可以使用繁重的密集代码“冻结”flash影片。 (当然,或者使用简单的无限循环)