ActionScript,鼠标事件的可能竞争条件

ActionScript, possible race condition on mouse event

我在这里有点不知所措。我有一个问题,我认为可能是由于鼠标事件优先。我有一个函数 f 在鼠标点击时被调用 - f 做了一些工作,然后调用另一个函数 gf 是否有可能运行,然后再次点击 - 再次调用 f - 然后 then g 被执行?

如果我的措辞难以理解,我会尝试展示我认为可能发生的事情:

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

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

我可以肯定地说,只有在非常快速地连续单击两次时(并且并非总是如此)才会出现此问题(大约 50 次慢速双击和 ~50 次快速双击)。我意识到我的数字可能比它澄清的更令人困惑,但我不确定如何表达我的想法。非常感谢任何输入!

A​​S3 是一个单线程代码执行环境,它将执行所有相关代码。如果单击触发了一系列方法的执行,则所有这些方法都将 运行 在任何其他代码再次执行之前。因此,由于 AS3 代码的单线程特性,因此在代码执行过程中不会出现竞争条件。

A​​S3 中的所有事件在这方面都不是特例,当它们的侦听器触发时,所有代码都以相同的方式执行,并且在完成之前不能执行其他代码。

特例是:

  • 您可以使用计时器暂停执行,这样代码的执行将在稍后发生。在那种情况下,无法保证这些计时器的触发将与其启动顺序同步。

  • 正在执行异步命令(如加载某些东西),在这种情况下也不能保证加载操作会按顺序发生。

但这些特殊情况并没有违反AS3中的代码执行原则,所有代码都在一个线程中执行,因此它们不能有任何重叠。