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