|
|
|||||
Регистрация: Jan 2011
Сообщений: 247
|
Многопоточность в AS3
Есть готовое приложение на AIR с использованием сокета, он может отправлять картинки на сервер.
Проблема : при отправке файла(картинки) все приложение стопориться, до тех пор пока картинка полностью не передастся . Вопрос : как создать отдельный процесс(поток) не в убыток работоспособности целого приложения ? Вопрос #2 : как прикрутить прогресслоадер к передачи по сокету ?(для наглядности) кусок исходника передачи : var msg:ByteArray = new ByteArray(); var ba:ByteArray = new ByteArray(); var bmd:BitmapData=new BitmapData(1000,1000); bmd.draw(photo); var encoder:JPGEncoder = new JPGEncoder(100); ba = encoder.encode(bmd); msg.writeBytes(ba); try{ socket.writeBytes(msg); socket.writeUTFBytes('fullsize'); socket.flush(); }catch (e:IOError){ trace(e); currentState = "loggedOut"; alarm_popup("ошибка связи"); } trace(ba.length +" "+ba.endian); |
|
|||||
Регистрация: Jan 2011
Сообщений: 247
|
Цитата:
Я могу ошибаться( а так скорее всего и есть ) но прикрутить к отправке по сокету это не прикрутить. Прогулил сразу по этому вопросу так : as3+socket+ worker , не получил чего ожидал... то что я понял: { public function MainThread() { if (Worker.current.isPrimordial) { startMainThread(); } else { startWorkerThread(); } } //загрузка в фоновом режиме private function startMainThread(): void { // Use our own SWF bytes to create the worker thread var worker:Worker = WorkerDomain.current.createWorker(loaderInfo.bytes); // ... more main thread setup // не понятно как даже прикрутить к воркеру получения не говоря уже об отправке через сокет } // продолжение работы основго приложения private function startWorkerThread(): void { // ... worker thread setup } |
|
|||||
GrafMine,
Worker никак не связан с загрузкой и/или выгрузкой чего-либо куда-либо. Это отдельный экземпляр FP, который можно запустить/убить из данного экземпляра FP и с возможностью общения между такими вот экземплярами. Вы можете передавать данные как с помошью копирования (2 или более потока полностью дублируют объекты, чтобы передавать их друг другу), так и разделяя их между Worker'ами (то есть 2 или более потока одновременно работают с 1 объектом). Можете почитать, например, здесь. Должен заметить что на практике сталкивались с тем, что более 2 потоков (то есть один основной, в котором класс Main, и второй дочерний, запущенный из основного) иметь не стоит, это черевато внезапными падениями плеера на разных операционных системах. PS У сокета вообще-то есть событие на прогресс отправки. И еще - было бы интересно увидеть, как именно вы что-то по сокету отправляете, что у вас все зависает. Что-то мне подсказывает, что отправка по сокету не будет требовать много ресурсов, подозреваю что дело в операциях которые вы выполняете незадолго до отправки (кодирование в jpeg/png например).
__________________
...вселенская грусть |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
gloomyBrain я обязательно прочту статьи по Вашей ссылке, но у меня возник вопрос по Вашим словам - "более 2 потоков иметь не стоит". То есть, вворкером вообще лучше не пользоваться или я не правильно понял?
|
|
|||||
[+4 06.05.14]
|
Akopalipsis правильно понимаешь. Качественных потоков у АС3 нет, воркеры - это поделка на коленке, потому что многие вопили, что дайте нам ПОТОКИ! Полноценных потоков в ближайших версиях ФП не появится. Если только в АС4
__________________
Марк Tween |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
in4core Спасибо! А то я со вчерашнего дня всё придумываю, где бы их применить
|
|
|||||
Регистрация: Jan 2011
Сообщений: 247
|
Цитата:
а на счет события event : outputProgress, работает он у меня как-то "кривовато" показывает всегда 0 и только в начале и все, пример : socket.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, socketOutputProgress); protected function socketOutputProgress(e:OutputProgressEvent):void { trace("OUTPUT PROGRESS => bytesPending: " + e.bytesPending + " / bytesTotal: " + e.bytesTotal + "\n"); } //output: //OUTPUT PROGRESS => bytesPending: 0 / bytesTotal: 575202 Последний раз редактировалось GrafMine; 23.12.2013 в 06:39. |
|
|||||
Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
Регистрация: Jan 2011
Сообщений: 247
|
Цитата:
вопрос с OutputProgressEvent.OUTPUT_PROGRESS по прежнему открыт |
Часовой пояс GMT +4, время: 11:14. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|