我在这里有点不知所措。我有一个问题,我认为可能是由于鼠标事件优先。我在鼠标点击时调用了函数f
- f
执行了一些功能,然后调用另一个函数g
。甚至可能f
运行,然后再次点击 - 再次调用f
- 然后执行然后 g
?
如果我的措辞很难理解,我会尝试展示我的想法:
click1 ----- /-----------\
\ / \
f -- f-- g g
/ \ /
click2 ------------ / \--------
|---------------- timeline----------------------|
我可以肯定地说,只有在非常快速连续点击两次时才会出现问题(大约50次慢速和大约50次快速双击)(并非总是如此)。我意识到我的数字可能比它澄清的更令人困惑,但我不确定如何传达我的想法。非常感谢任何输入!
答案 0 :(得分:2)
AS3是一个单线程代码执行环境,它将执行所有相关代码。如果单击触发了一系列方法的执行,则所有这些方法将在任何其他代码再次执行之前运行。因此,AS3代码的代码执行中不会出现竞争条件,因为它具有单线程特性。
AS3中的所有事件在这方面都不是特殊情况,当它们的侦听器触发所有代码时,它的执行方式相同,并且在完成之前不能执行其他代码。
特殊情况是:
您可以使用计时器等暂停执行,以便稍后执行代码。在这种情况下,没有保证触发这些计时器将与他们的起始订单同步。
执行异步命令(比如加载某些东西),在这种情况下,没有任何担保加载操作也会按顺序发生。
但是这些特殊情况并没有违反AS3中代码原则的执行,所有代码都在一个线程中执行,因此它们不能重叠。