Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.04.2011, 11:04
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 1  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
Question Распределение во времени долговыполняющегося цикла

Здравствуйте! Помогите, пожалуйста.
Есть цикл:
Код AS3:
var мой_XMLListLength = мой_XMLList.length();
for (var i:int=0; i<мой_XMLListLength; i++) {
   trace(мой_XMLList[i]);
}
Этот цикл не успевает выполниться в отведённые ему 60 секунд.
Кто решал подобные задачи, подскажите, как распределить этот цикл во времени, что бы он смог выполниться полностью.

Старый 21.04.2011, 12:41
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 2  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Это не сложно - как вариант - цикл должен находиться в обработчике ENTER_FRAME и в этом цикле отслеживать нужно текущее время, потраченное на выполнение этого цикла. Если оно больше определенного значения, то обрывать цикл, но запоминать текущую позицию. Затем при переходе на новый кадр возобновлять цикл с нужной позиции. По завершении - удалить ENTER_FRAMEю

Старый 21.04.2011, 13:28
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 3  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
Волгоградец, Вы можете пояснить это кодом?

Может кто-то знает, как прерывать и возобновлять выполнение цикла по событию ошибки превышения времени исполнения скрипта (Ошибка 1502)?
Вариант с событием ENTER_FRAME почему-то кажется мне "стрёмным"...


Последний раз редактировалось zorexundra; 21.04.2011 в 14:11.
Старый 21.04.2011, 14:08
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 4  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Как то так
Код AS3:
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());
}
Не нравится ентерфрайм - делай то же самое через setInterval, Timer и т.п.

Старый 21.04.2011, 14:24
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 5  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
Спасибо за рабочий пример!
Волгоградец, а у Вас нет идеи как реализовать прерывание по событию Ошибки 1502.
Просто я заметил, перефразируя слова Того самого Мюнхгаузена: - Дело в том, что во Флеше и
на земле время летит не одинаково.

Старый 21.04.2011, 14:28
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 6  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
try catch

Старый 22.04.2011, 10:43
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 7  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
Волгоградец, ещё раз спасибо! Это решило все проблемы, а именно:
Код AS3:
var мой_XMLListLength = мой_XMLList.length();
for (var i:int=0; i<мой_XMLListLength; i++) {
   try {
        trace(мой_XMLList[i]);
   } catch (e:Error) {
        i--;
   }
}
Кстати, это ответ и на эту тему - http://www.flasher.ru/forum/showthread.php?t=154238

Старый 06.04.2012, 19:40
Rundll вне форума Посмотреть профиль Отправить личное сообщение для Rundll Найти все сообщения от Rundll
  № 8  
Ответить с цитированием
Rundll

Регистрация: Jan 2012
Сообщений: 23
Столкнулся с похожей проблемой, есть цикл который не успевает выполнить необходимые вычисления и вываливается ошибка сценария 1502. Я так понимаю, что вариант с обработчиком ENTER_FRAME относится к Flash CS в котором есть timeline, есть ли подобный трюк для Flash/Flex Builder?

Старый 06.04.2012, 20:00
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 9  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 921
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
timeline это всего лишь панелька во Flash.
ENTER_FRAME будет работать везде.

Старый 07.04.2012, 01:07
Rundll вне форума Посмотреть профиль Отправить личное сообщение для Rundll Найти все сообщения от Rundll
  № 10  
Ответить с цитированием
Rundll

Регистрация: Jan 2012
Сообщений: 23
Да, что-то я погорячился. А если мне необходимо вызвать предложенный метод с циклом из другого метода (т.е. есть код и предположим в середине кода вызывается функция с циклом, после чего предполагается использовать обработанные данные в следующем за вызванной функцией коде) будет ли работать данная конструкция? По идее должен получиться некий асинхронный вызов, но код за вызванной функцией не должен исполняться пока функцией не будут возвращены данные. Как быть?

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:02.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.