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

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

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
По умолчанию Передать определение класса в фоновый worker.

Помогите передать определение класса в фоновый выполняющийся swf. (Worker)
Вообщем, я пробую передать ссылку на класс через канал:

Главный swf:
Код AS3:
var channel:MessageChannel;
channel.send(User); // Не экземпляр а именно класс
В фоновом приходит уже не Class а Object:
Код AS3:
trace(channel.receive()); // Object
И потом уже не могу зарегистрировать его через registerClassAlias(), так как там требуется Class.
Такая дилема.

Мотивы этой историй в том, что-бы 1 раз создать класс, который бы запускал отдельный поток с возможностью выгрузки в него реализаций (Классов) и последующей передачи выполнения разных задач с этими классами. Что-бы не делать каждый раз отдельный swf для конкретной задачи, так-как Worker принимает на вход swf.
__________________
Дети не должны знать о своих родителях

Старый 07.02.2015, 14:33
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 2  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Насколько я понимаю, передать ссылку на класс, которого в воркере нет, нельзя. Просто потому что Worker - это отдельный инстанс виртуальной машины. Тем не менее, можно передать байткод, в котором класс описан.
__________________
...вселенская грусть

Старый 07.02.2015, 14:44
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 3  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Я так думал, что передавая Class - он (определение) сериализуется и передастся в другой воркер. Но на деле, во втором воркере получаю уже Object а не Class.

Ок, как тогда записать определение класса в байткод и затем обратно собрать и зарегистрировать?
Тут вопрос получается такой: как в рантайме создать определение нового класса из байткода.
Вот простенький пример с записью класса в байткод: (Тоже самое происходит при передаче его в воркер)
Код AS3:
var bytes:ByteArray		= new ByteArray;
bytes.writeObject(User);
bytes.position	= 0;
 
trace(bytes.readObject()); // Object а не Class
Вот как обратно получить Class, что-бы можно было зарегистрировать его?
__________________
Дети не должны знать о своих родителях

Старый 07.02.2015, 16:46
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 4  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
Ок, как тогда записать определение класса в байткод и затем обратно собрать и зарегистрировать?
Тут вопрос получается такой: как в рантайме создать определение нового класса из байткода.
Вообще это 2 разных вопроса =)
По второму вопросу все просто: ApplicationDomain.getDefinition(). То есть просто берем Loader, делаем ему loadBytes(mySwfBytes) и получаем Loader с загруженной в него swf-кой. mySwfBytes - это то, что будем передавать между потоками. Там собственно и будет наш байткод.
А вот по первому вопросу все сложнее - я вижу 2 решения.
1) Разбить нужный блок приложения на кучу swf-ок (1 класс == 1 swf). Тогда сможем отсылать в воркер нужные нам классы по одному.
2) Генерить swf "на лету". Инструменты для этого есть, можно нагуглить.

ЗЫ
Не совсем ясен контекст задачи, возможно есть другие пути.
__________________
...вселенская грусть

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Спасибо. Я решил делать отдельный swf для каждой конкретной задачи/задач.
__________________
Дети не должны знать о своих родителях

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

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

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


 


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


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