Могу ли я гарантировать, что все слушатели выполнили следующую строку после отправки события? - PullRequest
1 голос
/ 16 декабря 2009

В этой теме есть несколько вопросов о переполнении стека, но мне все еще неясно:

Я знаю, что флеш-движок является однопоточным, поэтому, когда он получает событие, он по существу прерывается, выполняет какие-либо зарегистрированные прослушиватели событий (в произвольном порядке) и затем возвращается к текущей области?

Если у меня есть этот код:

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

Я хочу знать:

Могу ли я гарантировать , что оба слушателя выполнили к тому времени, когда я достигну трассы ("Done"); ?

редактирование:

или

Могу ли я гарантировать , что текущая функция будет завершена до выполнения какого-либо из прослушивателей событий? то есть trace ("Done"); ВСЕГДА будет выполняться первым.

или

Ни.

Ответы [ 3 ]

3 голосов
/ 16 декабря 2009

Гарантируется, что оба обработчика событий будут вызываться до трассировки, поскольку события, генерируемые кодом пользователя, являются синхронными:
Прерывает ли отправка события функцию?

2 голосов
/ 16 декабря 2009

Из того, что я знаю, когда вы отправляете событие, оно добавляется в очередь событий, но фактически не запускается, пока не завершится текущее событие. Другими словами, вы проследите «Готово», затем ваша функция завершится, управление вернется к обработчику событий, и только тогда он (возможно) начнет выполнять одно из ваших событий.

1 голос
/ 16 декабря 2009

Да, вы можете гарантировать оба утверждения в этой конкретной ситуации. Это означает, что если вы добавляете своих слушателей событий и отправляете ваше событие в тот же кодовый блок , это будет происходить последовательно. Однако из практического POV это совершенно бесполезно.

@ kryoko: события игрока имеют приоритет над событиями пользователя, но они не «форсируют» себя. Это означает, что если пользовательский код выполняется, обработка событий игрока приостанавливается. Вот почему можно «заморозить» флэш-фильм с тяжелым, интенсивным кодом. (Или с простым бесконечным циклом, конечно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...