Просмотр полной версии : Многопоточная загрузка картинок
Стоит задача, загрузить во флешку 10 картинок. Обычно делал что-то типа такого:
for(var i:int = 0; i < 10; i++ )
{
var loader:Loader = new Loader();
loader.load(new URLRequest(i + ".jpg"));
loader.contentLoaderInfo.addEventListener(Event.Complete, foobar);
}
Загрузка получается не дожидается события комплит и создает новый лоадер. Но на некоторых компьютерах не все картинки загружались, поэтому пришлось сделать рекурсивную функцию загрузки, где новый лоадер создается только после события комплит.
Вопрос такой, а как можно реализовать многопоточную загрузку, 3-х картинок одновременно. Создавать три лоадера одновременно?
Подобную штуку видел у зеленого носка, но там очень много кода, чтобы понять, как это реализовано)
iflamberg
28.12.2010, 14:32
Картинки не загружались, потому что вы нигде не храните ссылку на создаваемый вами loader и его съедает GarbageCollector, до того, как он загрузит картинку. Делайте так:
var loaders:Array = [];
for(var i:int = 0; i < 10; i++ )
{
var loader:Loader = new Loader();
loader.load(new URLRequest(i + ".jpg"));
loader.contentLoaderInfo.addEventListener(Event.Complete, foobar);
loaders.push (loader);
}
и будет вам счастье. Не забудьте отчистить loaders, когда всё загрузите.
gloomyBrain
28.12.2010, 15:59
артинки не загружались, потому что вы нигде не храните ссылку на создаваемый вами loader и его съедает GarbageCollector, до того, как он загрузит картинку
Я Вам не верю. Покажите на примере, чтобы работающий лоадер был скушан.
iflamberg
28.12.2010, 17:03
Лень что-то доказывать, тем более человеку, что показывает мне средний палец с аватарки. Пусть форумные старожилы подтвердят или опровергнут. Или топикстартер отпишется помогло или нет.
mikhailk
28.12.2010, 17:31
Кстати, да
у меня вот такой код работает без проблем:
private function loadAllImages(imagesList:XMLList) : void
{
objectsForLoading = imagesList.length();
for (var i:int = 0; i < objectsForLoading; i++)
{
objectBytesTotal[i] = 0;
var request:URLRequest = new URLRequest(imagesList[i].attribute("fileName"));
var loader:Loader = new Loader();
loader.name = String(i);
loader.load(request,new LoaderContext());
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, saveObject);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
}
Так что у автора в чем-то другом проблема
Лучше эту задачу не решать, а загрузить последовательно т.как при одновременной загрузке есть вероятность что сервер откажется ждать, или клиент не отправит запрос на тот же адрес (и там и там могут быть ограничения от вас не зависящие), и потом пытаться угадать в вашей программе а почему случился IOError - зачем это нужно.
Добрый вечер!
А подскажите, как реализовать общий загрузчик (т.е. один), для загрузки нескольких картинок и прогрессом от 0 до 100%. 100% это все картинки а не каждая в отдельности.
Надеюсь понятно описал :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.