2016-01-15 29 views
-1

我在这里有点亏本。我有一个问题,我认为可能是由于鼠标事件优先。我有一个函数f被调用的鼠标点击 - f做了一些工作,然后调用另一个函数g。它甚至有可能是f运行,然后再次单击发生 - 调用f再次 - 和然后g执行?ActionScript,鼠标事件可能的竞态条件

如果我的措辞是很难理解的,我会尽量表现我认为可能会发生:

click1 -----  /-----------\ 
       \ /   \ 
        f --  f--  g g 
         / \  /
     click2 ------------/ \-------- 

|---------------- timeline----------------------| 

我可以肯定地说这个问题只出现(满分为50〜缓慢和〜50快速双击),当连续点击两次时(并不总是)。我意识到我的身材可能会混淆不清,但我不确定还有什么别的方式来表达我的想法。任何输入非常感谢!

+0

我不认为你描述了这个问题。无论如何,没有任何竞赛状况发生,所有的代码都会被执行。 – BotMaster

+0

我故意不说明问题,因为如果这不是理由,那么它可能是一个相当大的代码库的任何地方(就不能总结一下那张在一个单一的问题,一切)。所以你肯定鼠标点击事件不会中断运行代码?你有没有任何参考文件来备份你的声明?对不起,如果我遇到困难,我只是想确定一下,以便我可以继续研究其他可能性。 – EvenLisle

+1

您是否已经将呼叫记录到'f'和'g'以查看订单是否符合您的期望? – Aaron

回答

2

AS3是单线程代码执行环境,因为它呈现本身将执行所有相关的代码。如果点击触发了一系列方法的执行,那么所有这些方法都会在任何其他代码再次执行之前运行。因此,AS3代码的代码执行中不存在竞争条件,因为它具有单线程特性。

在AS3中所有事件都没有这方面的特殊情况下,当所有的代码被执行以同样的方式,直到它完成,可以执行任何其他代码的监听器触发。

特殊情况是:

  • 您可以通过使用计时器,并暂停执行这类所以代码的执行将在稍后的时间发生。在这种情况下,这些定时器的触发将不会与其启动顺序同步。

  • 执行异步命令(如加载的东西),在这种情况下,有没有保证装卸作业将按顺序发生两种。

但这些特殊情况不违反准则的原则在AS3的执行,所有代码执行一个线程所以他们不会重叠的任何一种都可以。