Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по синхронизации Command 
:(
    Опции темы
Goduy
Дата 11.11.2006, 04:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



Допустим, у нас есть два Screen'a - Form и List (вернее два класса, наследованных от Form и List).
В Form есть две команды -  Back (перейтина на экран List) и Calc (что-то посчитать).
Обработчик команд синхронизированыый (sinchronized).
Сначала мы видим экран Form и допустим мы быстро нажали сначала на Back, а потом на Calc.
Как я понимаю, сначала вызовется обработка Back, а обработка Calc будет ждать, пока первая команда не обработется.
Обработка Back включает в себя показ List и передачи ему управления.

У меня вопрос: после того, как List'у передано управление, Calc будет обрабатываться или нет? Если да, то можно ли сделать так, чтобы после перехода на другой экран, все обработки прежнего экрана, как бы это по лучше сказать, "исчезали" чтоли, кароче не обрабатывались smile
Заранее благодарен smile
PM MAIL   Вверх
W0LF
Дата 11.11.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Хотелось бы на кусок кода посмотреть вначале...
Цитата

Как я понимаю, сначала вызовется обработка Back, а обработка Calc будет ждать, пока первая команда не обработется.

Да, будет ждать, но для этого ничего не надо синхронизировать...
Если у тя по нажатию клавиши будет что-то долго выполняться, то оно будет выполняться в системном потоке(тем самым вешая мидлет), и вторая задача(обработка calc) уже будет в очереди.
Синхронизация же нужна для критической секции, которую будут кушать два или более потоков одновременно.
Цитата

У меня вопрос: после того, как List'у передано управление, Calc будет обрабатываться или нет? Если да, то можно ли сделать так, чтобы после перехода на другой экран, все обработки прежнего экрана, как бы это по лучше сказать, "исчезали" чтоли, кароче не обрабатывались smile

Не будет обрабатываться, но если в твоем листе есть комманды(например Ok, Cancel), то будет выполнена автоматом та, которую первой добавили к новому Displayable(в нашем случае Listу)

Это сообщение отредактировал(а) W0LF - 11.11.2006, 15:36


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Goduy
Дата 11.11.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



Цитата

Не будет обрабатываться, но если в твоем листе есть комманды(например Ok, Cancel), то будет выполнена автоматом та, которую первой добавили к новому Displayable(в нашем случае Listу)


Ого!  smile Огоромное спасибо! Вы, может быть, меня сейчас от потенциальной головной боли спасли smile Теперь я похоже понял, как это все работает smile В системном потоке, как я понимаю,  есть что-то типа пула потоков, и каждая Command обрабатывается поочереди, а какой класс будет это сообщение обрабатывать, ее уже совсем не волнует, так?

У меня еще такой вопрос, как лучше обрабатывать команды, в одном классе или в разных? Если не сложно, поделитесь своими принципами структуризации обработки клавиш smile

P.S. Извините за такую навязчивость со своими вопросами... Если в J2Me прокачаюсь, потом тоже буду новичков лечить smile
PM MAIL   Вверх
W0LF
Дата 11.11.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Цитата(Goduy @  11.11.2006,  15:54 Найти цитируемый пост)
P.S. Извините за такую навязчивость со своими вопросами... Если в J2Me прокачаюсь, потом тоже буду новичков лечить smile 

Я тож еще новичек smile


Цитата(Goduy @  11.11.2006,  15:54 Найти цитируемый пост)
В системном потоке, как я понимаю,  есть что-то типа пула потоков

Не совсем.
Цитата

Системным называется любой поток, который не был порожден приложением и не контролируется им. В среде MIDP системные потоки создаются менеджером приложений (AMS - application management software) - программой контролирующий ход выполнения MIDlet-ов. Каждый активный мидлет помимо своих потоков имеет, по крайней мере, один системный.

Обратите внимание на слова "по крайней мере"! Приложение может использовать и большее количество системных потоков. При необходимости с ними могут совместно работать несколько мидлетов (если это не противоречит правилам "песочницы" [так называется одна из моделей безопасности, применяемая для мидлетов] или другим ограничениям.). MIDP не дает ни каких гарантий относительно того, какие потоки использует ASM для своих нужд.

Если тебе нужен пул потоков, то делаешь его сам, ну или мона с ЕЕ скомуниздить(java.util.concurrent.ThreadPoolExecutor) smile

Цитата(Goduy @  11.11.2006,  15:54 Найти цитируемый пост)
а какой класс будет это сообщение обрабатывать, ее уже совсем не волнует, так?

Ну, эт я не знаю - почему так происходит, но так есть! smile
Цитата(Goduy @  11.11.2006,  15:54 Найти цитируемый пост)
У меня еще такой вопрос, как лучше обрабатывать команды, в одном классе или в разных? Если не сложно, поделитесь своими принципами структуризации обработки клавиш smile

Делаешь один коммандлистенер на все твои вьюверы(формы,листы).
В каждом вьювере пишешь метод(пусть commandAction) и потом в твоем коммандлистенере в методе commandAction вызываешь commandAction соответствуещего вьювера

Добавлено @ 16:25 
Прикол в том, что +50 байт в каждый вьювер за имплемент коммандлистенера


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.