![]() |
Модераторы: javastic, AntonSaburov |
![]() ![]() ![]() |
|
Gershkovich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 8.2.2006 Репутация: нет Всего: 2 |
Всем привет!
Никто не замечал такой особенности WTK 2.2 ? если запущен 1(один) поток который котнектиццо к Инету, то главный поток тормозит. Причом конкретно тормозит. Это выражается в медленном открывании меню и медленном срабатывании кнопок (т.е. их лиснеров) Имеется в виду тока WTK 2.2 На реальном девайсе не пробовал На всяк. случай вот код потока:
Причем лиснер срабатывает только после того как этот поток завершится. Очень похоже на http://forum.vingrad.ru/topic-139944.html Это сообщение отредактировал(а) Gershkovich - 23.10.2007, 18:43 |
|||
|
||||
VOS |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 31.1.2007 Репутация: 6 Всего: 8 |
Я тоже задавался этим вопросом. Похоже, что в J2ME (по крайней мере во многих телефонах) используется не вытесняющая, а кооперативная многозадачность. Т.е. если при вытесняющей многозадачности потоку дается квант времени или определенное кол-во инструкций, которое выполняет проц и затем переключается на выполнение другого набора инструкций (другой поток), то в J2ME механизм как в Windows 3.1/3.11. Поэтому желательно периодически вызывать Thread.yield() особенно внутри всяких вычислительных циклах, чтобы дать отработать другим потокам. Подозреваю, что по этой причине отрисовка графики в J2ME синхронизирована автоматом, в отличие от J2SE (например в Swing), где надо использовать некие механизмы, которые в конечном счете отправляют сообщение в основной граф. поток, чтобы именно он отрисовал что-то там. Иначе все может заглючить. А в J2ME, например, тот же drawString выполняется по-любому атомарно, а значит не надо и синхронизировать или че-то там придумывать.
Соответственно если в какой-то даже системной функции нет периодического вызова Thread.yield()/аналога то все остальные потоки будут терпеливо ждать пока она отработает. Естественно при таком построении сложно обрабатывать большое кол-во потоков, возможно поэтому их кол-во ограничено (как об этом писал WOLF и javastic). Опять же, не факт что так оно и есть, но как-то похоже на то ;) |
|||
|
||||
hamsterKSU |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 401 Регистрация: 20.10.2006 Где: Украина, Херсон Репутация: 7 Всего: 11 |
у меня были такиеже глюки с конетом, но только когда адресс не существовал, он там очень долго пытался его найти. все это решилось показом экрана ожидания.
|
|||
|
||||
Gershkovich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 8.2.2006 Репутация: нет Всего: 2 |
hamsterKSU, у меня именно так.
Тормоза наблюдаются именно если УРЛ по какой-то причине не доступен. Например у меня, фаервол блокировал порт. VOS, Спасибо. Это, наверно, единственное объяснение. Жаль не могу протесировать с yield - зависает именно на вызове Connector.open(... PS Тут мне народ подсказывает что на реальных телефонах всё вроде бы Ок. Что глюки проявляются только на WTK. |
|||
|
||||
![]() ![]() ![]() |
FAQ раздела лежит здесь! |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |