![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 177
|
Здравствуйте! Помогите, пожалуйста.
Есть цикл: var мой_XMLListLength = мой_XMLList.length(); for (var i:int=0; i<мой_XMLListLength; i++) { trace(мой_XMLList[i]); } Кто решал подобные задачи, подскажите, как распределить этот цикл во времени, что бы он смог выполниться полностью. |
|
|||||
|
Это не сложно - как вариант - цикл должен находиться в обработчике ENTER_FRAME и в этом цикле отслеживать нужно текущее время, потраченное на выполнение этого цикла. Если оно больше определенного значения, то обрывать цикл, но запоминать текущую позицию. Затем при переходе на новый кадр возобновлять цикл с нужной позиции. По завершении - удалить ENTER_FRAMEю
|
|
|||||
|
Регистрация: Dec 2010
Сообщений: 177
|
Волгоградец, Вы можете пояснить это кодом?
Может кто-то знает, как прерывать и возобновлять выполнение цикла по событию ошибки превышения времени исполнения скрипта (Ошибка 1502)? Вариант с событием ENTER_FRAME почему-то кажется мне "стрёмным"... Последний раз редактировалось zorexundra; 21.04.2011 в 14:11. |
|
|||||
|
Как то так
var iterator:int = 00; var lim:Number = 33; addEventListener(Event.ENTER_FRAME, doCalc); function doCalc(event:Event):void { var t:Number = getTimer(); for(var i:int = iterator; i < 10e6; i++) { if(getTimer() - t > lim) { iterator = i; return; } var s:String = ''; s.split(''); } iterator = 0; removeEventListener(Event.ENTER_FRAME, doCalc); trace('complete', getTimer()); } |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 177
|
Спасибо за рабочий пример!
Волгоградец, а у Вас нет идеи как реализовать прерывание по событию Ошибки 1502. Просто я заметил, перефразируя слова Того самого Мюнхгаузена: - Дело в том, что во Флеше и на земле время летит не одинаково. |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 177
|
Волгоградец, ещё раз спасибо! Это решило все проблемы, а именно:
var мой_XMLListLength = мой_XMLList.length(); for (var i:int=0; i<мой_XMLListLength; i++) { try { trace(мой_XMLList[i]); } catch (e:Error) { i--; } } |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 23
|
Столкнулся с похожей проблемой, есть цикл который не успевает выполнить необходимые вычисления и вываливается ошибка сценария 1502. Я так понимаю, что вариант с обработчиком ENTER_FRAME относится к Flash CS в котором есть timeline, есть ли подобный трюк для Flash/Flex Builder?
|
|
|||||
|
timeline это всего лишь панелька во Flash.
ENTER_FRAME будет работать везде. |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 23
|
Да, что-то я погорячился. А если мне необходимо вызвать предложенный метод с циклом из другого метода (т.е. есть код и предположим в середине кода вызывается функция с циклом, после чего предполагается использовать обработанные данные в следующем за вызванной функцией коде) будет ли работать данная конструкция? По идее должен получиться некий асинхронный вызов, но код за вызванной функцией не должен исполняться пока функцией не будут возвращены данные. Как быть?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 16:40. |
|
|
« Предыдущая тема | Следующая тема » |
|
|