PDA

Просмотр полной версии : Цикл while, бесконечный...


Golovach
11.08.2007, 17:11
Делаю загрузку большого количество данных (строки, числа) из php во флеш.
Php передает строку вида:


streets=1-го мая|Ленинградская|Ярошенко&num=1000&done=1&


Ловлю все это во флеше:

1-й кадр

this.createEmptyMovieClip("streets_y", this.getNextHighestDepth());
loadVariables("http://map.ru/?pos_y", streets_y);
if (streets_y.done != 1){
trace("нет еще");
}
else{
nextScene();
}


2-й кадр:

gotoAndPlay(1);


Так все работает на ура. А теперь внимание вопрос: когда я делаю все "по умному", т.е. вместо двух кадров один и пишу в нем:


this.createEmptyMovieClip("streets_y", this.getNextHighestDepth());
loadVariables("http://map.ru/?pos_y", streets_y);
while (streets_y.done != 1){
trace("нет еще");
}
nextScene();


...при этом цикл получается бесконечным... Объясните мне, убогому, что здесь не так. Возможно ДНК?
Вопрос вдогонку. Флеш самостоятельно останавливает выполнение моего скрипта с алертом. На чем базируется его решение об остановке скрипта и можно ли это отследить?
Заранее спасибо.

etc
11.08.2007, 19:32
Все здесь не так. Начиная от использования такого архаизма, как loadVariables вместо нормального LoadVars, заканчивания отсутствием понимая работы этого самого loadVariables. Флеш однопоточен и асинхронен, цикл while наглухо убивает все остальное, никаких действией (окончание загрузки, создание свойства done у streets_y) не сможет произойти, пока цикл не будет выполнен. А в силу асинхронности, окончание загрузки происходит гораздо позже выполнения кода после вызова loadVariables. Но окончание загрузки никогда не произойдет, потому что код сразу после loadVariables ещё не выполнен.
Резюме: использовать LoadVars.

Golovach
11.08.2007, 19:36
Спасибо за развернутый ответ.