Цитата:
Сообщение от Guitariz
и все равно кривовато, начинает действие одна функция, а завершает другая
|
Это не кривость, это правильная реализация.
Скажем, в консольных приложениях можно остановить работу программы в ожидании действий пользователя.
В интерфейсном приложении так не получится. Кроме основного кода, есть множество других функций.
Например, если вы занимаетесь распаковкой архива, то это задача может затребовать десятки секунд и линейное выполнение кода просто приведет к тому, что не будет отрабатываться события отмены архивации, закрытие приложения и тп. Поэтому там распаковка выводится в отдельный поток, а основной продолжает заниматься обработкой событий.
В AS3 нет многопотоковости (хотя плеере 11.4 появился Worker). Более того, вы не забывайте, что это флеш и его начальное предназначение - анимация, то есть есть последовательное проигрывание кадров.
А каждый кадр состоит из следующих частей:
1. Идет рассылка событий типа клика мыши или нажатия клавиши
2. Идет рассылка события Event.ENTER_FRAME
3. Идет рассылка события Event.EXIT_FRAME
4. Идет рассылка события загрузки, типа Event.INIT, Event.OPEN, Event.COMPLETE и тп.
5. Идет рассылка события Event.RENDER
6. Плеер выводит графику (рендеринг).
И пока любая из этих частей не выполнится, следующая не запустится. Визуально программа просто встанет. Не будет ни анимации, ни реакции на клаву или мышь.
Поэтому вы подписываетесь на событие и ждете, когда оно сработает. А в это время программа продолжает выполнять свои задачи.