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

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

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

Регистрация: May 2009
Адрес: Moscow
Сообщений: 2
Question События - синхронны или асинхронны?

Добрый день!
Я новичок в AS3, есть некий опыт разработки на C++.
Насколько я понял, весь код, выполняемый после запуска приложения работает в единственном потоке и поэтому события выполняются синхронно - код, который делает вызов addEventListener ожидает, пока отработает метод, вызывающий dispatchEvent. Тогда в каком контексте выполняется цикл работы таймера? Ведь после вызова timer.start мы продолжаем работу?
На всякий случай прошу прощения за несоблюдение терминологии.
Спасибо.

PS Читал Колина Мука, но у него тема событий раскрыта чисто "потребительски", без деталей работы - делай так и будет щастье.

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

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Как я понимаю, флэш реализует многопотоковость, но инструментов управления у программиста нет.
Например, если в каком-нибудь незначительном обработчике произайдет эксепшн,
то основной поток продолжит свое выполнение.

Старый 20.05.2009, 12:34
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от NiJazz Посмотреть сообщение
делает вызов addEventListener ожидает, пока отработает метод, вызывающий dispatchEvent.
Нет, не ожидает. Код выполняется дальше. События в отдельном потоке.

Старый 20.05.2009, 19:03
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 4  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
Флеш выполняет весь код в одном потоке. Таймер срабатывает между вызовами Event.ENTER_FRAME, причем, если процессор сильно загружен и EnterFrame будет не успевать в заданную частоту кадров, то события таймера могут пропускаться. Поскольку весь код обрабатывается в одном потоке, два обработчика событий, например, ENTER_FRAME и Timer не могут работать в одно время. Во флеше 10 появилась настоящая многопоточность, но она выполняет на другом процессоре только отрисовку и скрипты PixelBender, т.е. AS3 код попрежнему выполняется в одном потоке как и раньше.

Старый 20.05.2009, 19:46
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 5  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Яски, а если бы он не работал в разных потоках второй бы не тормозил бы? Вы не в теме. реальная многотопочность во флэше с тех пор как, появилась загрузка файлов бред не несите.

Добавлено через 1 минуту
Яски, и да. p.s.:таймеры в отдельном потоке.

Старый 20.05.2009, 20:30
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 6  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Цитата:
реальная многотопочность во флэше с тех пор как, появилась загрузка файлов
Не нужно путать теплое с мягким. Разговор идет о пользовательском коде. Два фрагмента AS кода одного swf не могут выполняться одновременно, что означает что в AS многопоточности нет. Pixel Bender код может выполняться параллельно AS-коду, поэтому с натяжкой можно сказать, что в 10м плеере многопоточность есть. Никакого отношения загрузка файлов к этому не имеет в принципе.
__________________
4am is time to rock

Старый 20.05.2009, 23:39
NiJazz вне форума Посмотреть профиль Отправить личное сообщение для NiJazz Найти все сообщения от NiJazz
  № 7  
Ответить с цитированием
NiJazz

Регистрация: May 2009
Адрес: Moscow
Сообщений: 2
Спасибо большое за ответы!
Выходит, что вызов любого метода класса, унаследованного от EventDispatcher, тут же возвращает управление и в какой-то момент происходит вызов callback'a с помощью dispatchEvent?
И ещё, как я понимаю, этот класс должен быть членом класса вызывающего метода. В противном случае, сборщик мусора его уничтожит, так как единственная ссылка на него локальна легко может выйти за пределы видимости задолго до того, как будет сделан вызов dispatchEvent.

Старый 20.05.2009, 23:47
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
события выполняются синхронно. последний пост просто тупо не понял. при чем тут наследования от EventDispatcher. Да хоть от XuEventDispatcher, будет то же самое. Класс должен быть членом класса. Интересная фраза. Сборщик мусора никого не уничтожит, пока есть last man standing (существует хотя бы одна ссылка на объект, который прдполагается удалить).
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 20.05.2009, 23:55
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
не, не уничтожит, даже в случае локальной переменной
Код AS3:
private function test():void
{
	var t:Timer = new Timer(1000);
	t.addEventListener(TimerEvent.TIMER, timerHandler);
	t.start();
}
private function timerHandler(evnt:TimerEvent):void 
{
	trace( "evnt : " + evnt );
}
другое дело, что добраться до нее (чтобы отписаться от рассылки, например) ты уже не сможешь

Старый 21.05.2009, 00:37
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 10  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
DarkLight, сударь, Вы меня ни с кем не путаете?

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

Теги
синхронность , события , Таймер

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

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


 


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


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