Задержка обработки событий во Flash - PullRequest
0 голосов
/ 05 июня 2009

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

Ответы [ 2 ]

2 голосов
/ 05 июня 2009

Ну, мне кажется, это чистый и эффективный способ сделать это.
Что вы подразумеваете под задержкой? Вы имеете в виду просто обрабатывать их позже или обрабатывать через определенное время?

Вы всегда можете установить тайм-аут на фактическую функцию обработки в вашем обработчике событий (используя flash.utils.setTimeout), чтобы обработать событие в определенный момент времени. Но это может стать неэффективным, так как у вас может быть много тайм-аутов, которые должны быть обработаны средой выполнения.

Может быть, вы могли бы указать свои потребности немного больше.

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

Хорошо, в основном, Flash Player является однопоточным, то есть Выполнение байт-кода является однопоточным . И любое событие, которое отправляется, обрабатывается немедленно, то есть dispatchEvent(someEvent) будет напрямую вызывать все зарегистрированные обработчики (таким образом, AS-байт-код).

Теперь есть события, которые на самом деле генерируются в фоновом режиме. Они поступают либо из входов / выходов (сеть, пользовательский вход), либо из таймеров (TimerEvents). Может случиться, что некоторые из этих событий действительно происходят, пока выполняется байт-код. Обычно это происходит в фоновом потоке, который передает событие (в абстрактном смысле этого термина) в основной поток через (де) очередь.

Если основной поток занят выполнением байт-кода, то он будет игнорировать эти сообщения до тех пор, пока это не будет сделано (обратите внимание: почти любое выполнение байт-кода всегда является неявным следствием события (будь то ввод кадра, или ввода, или таймера, или загрузки) операция или что угодно)). Когда он находится в режиме ожидания, он просматривает все очереди, пока не найдет доступное сообщение, не обернет информацию в объект события ActionScript и не отправит ее, как описано ранее.

Таким образом, эта организация очередей является механизмом очень низкого уровня, который происходит от связи между потоками (и появляется во многих сценариях с многопоточностью) и недоступен для вас.

Но, как я уже говорил, ваш подход оправдан и имеет смысл.

0 голосов
/ 08 июня 2009

Сохраните их в Vector вместо Array: p

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

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