![]() |
Модераторы: javastic, AntonSaburov |
![]() ![]() ![]() |
|
Antropoid |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 786 Регистрация: 1.6.2006 Где: &Ukraine==Ode ssa Репутация: 13 Всего: 16 |
Пусть есть код
Главный тред, обрабатывающий нажатия на кнопки девайса, должен запустить второй тред, соединяющийся по TCP с сервером. Если сервер долго не отвечает, то второй тред должен подвиснуть на Connector.open(...);, а Главный пойти дальше. Вопрос: А почему, собственно, Главный тред дальше идет только тогда, когда второй тред решит, что соединение не может быть установлено? -------------------- ![]() Задыхаясь от восторга заниматься чепухой. |
|||
|
||||
W0LF |
|
||||||||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
1. Как у тебя это компилится??
IOException - это checked exception! Добавлено @ 14:54
Так и происходит!
При чем тут отвечает он или нет????? Главный поток сразу же идет дальше!Он запустил второй и сразу же влез в твой цикл!
В твоем этом случае у тебя по ходу спрашивается разрешение на передачу и прием данных через сокеты, но ты не можешь на него реагировать так как главный поток ты скорее всего повесил напрочь своим циклом. Главный тред идеть дальше сразу после вызова метода старт, он даж не ждет соединения! -------------------- iOS developer |
||||||||
|
|||||||||
Dancer |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 29.4.2005 Где: Nizhniy Novgorod Репутация: 33 Всего: 37 |
-------------------- У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! ![]() |
|||
|
||||
Antropoid |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 786 Регистрация: 1.6.2006 Где: &Ukraine==Ode ssa Репутация: 13 Всего: 16 |
да, конечно. безусловно. Писал так, чтобы суть вопроса была ясна. Но...
Пусть для упрощения об этом уже спрашивали, а кнопка CMD_CONNECT делает новое подключение(старое при этом закрыто).
В этом и заключается вся суть вопроса. Тот огромный цикл я написал, чтобы было ясно, что он не отрабатывает полностью, т.е. Главный тред почему-то приостанавливается. Но почему ![]() -------------------- ![]() Задыхаясь от восторга заниматься чепухой. |
||||||
|
|||||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Ты пробовал код, который тебе написал Dancer?
Вот он должен работать. Попробуй, если еще не пробовал... -------------------- iOS developer |
|||
|
||||
Antropoid |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 786 Регистрация: 1.6.2006 Где: &Ukraine==Ode ssa Репутация: 13 Всего: 16 |
ОК, просьба модифицировать код Dancera и запустить под WTK
так почему все-таки подвисает? -------------------- ![]() Задыхаясь от восторга заниматься чепухой. |
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
А "CMD_CONNECT 1" печатает в окне дебага?
а можешь выложить класс весь? где это все происходит. -------------------- iOS developer |
|||
|
||||
Antropoid |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 786 Регистрация: 1.6.2006 Где: &Ukraine==Ode ssa Репутация: 13 Всего: 16 |
Печатает. -->
-------------------- ![]() Задыхаясь от восторга заниматься чепухой. |
|||
|
||||
Dancer |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 29.4.2005 Где: Nizhniy Novgorod Репутация: 33 Всего: 37 |
вот толи я долба..б, то ли одно из двух. Но если честно, то я не понимаю, нахрена в обработчик кнопок засовывать куски выполнения чего бы то ни было?
Убери свой цикл из обработчика нажатия на софткей. Ну, или просто вместо него на новую форму перейди, поменяй логику своей работы, в новом треде делай что-то что нужно пересчитать или циклы повыводить, но не в самом обработчике!!! -------------------- У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! ![]() |
|||
|
||||
Antropoid |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 786 Регистрация: 1.6.2006 Где: &Ukraine==Ode ssa Репутация: 13 Всего: 16 |
Да, пример написан из познавательных целей. Конечно ты прав. Но факт остается фактом - Главный тред приостанавливается. Я прав?
-------------------- ![]() Задыхаясь от восторга заниматься чепухой. |
|||
|
||||
W0LF |
|
||||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
ну, я тупо скомпилил это и у меня выскочило окно запроса к сети и через секунду пошел работать цикл
Добавлено @ 11:46 Да, это правильно, но не в этом то его проблема. У него типа главный тред виснет...
Нет, ты не прав! у меня он не виснет! Ты в реальном девайсе пробовал? какой эмулятор юзаешь? -------------------- iOS developer |
||||
|
|||||
Antropoid |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 786 Регистрация: 1.6.2006 Где: &Ukraine==Ode ssa Репутация: 13 Всего: 16 |
а ты пробовал еще раз нажать на Connect(т.е. соединение должно закрыться, потом снова установиться)? Я использую WTK 2.2. -------------------- ![]() Задыхаясь от восторга заниматься чепухой. |
|||
|
||||
W0LF |
|
||||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
сделай локальной в своем потоке!
Это сообщение отредактировал(а) W0LF - 13.3.2007, 12:46 -------------------- iOS developer |
||||
|
|||||
Antropoid |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 786 Регистрация: 1.6.2006 Где: &Ukraine==Ode ssa Репутация: 13 Всего: 16 |
Ага! Так все-таки подвисает!
Сделал SocketConnection socketConnection локальной переменной, - Главный тред все-равно подвисает!!! -------------------- ![]() Задыхаясь от восторга заниматься чепухой. |
|||
|
||||
Dancer |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 29.4.2005 Где: Nizhniy Novgorod Репутация: 33 Всего: 37 |
если нужно чтобы соединение закрылось, то тогда либо Thread свой синхронизуй, либо вводи дополнительную логику работы.
Сейчас же у тебя получается, что ты запускаешь ещё один поток, который хочет получить коннекшн, по тому же самому адресу, при каждом нажатии на софт_батон. Плюс ко всему, не забывай, в J2ME имеется ограничение на количество одновременно запущеных потоков. (что-то около 20 по спецификациям) У меня работало приложение, которое из трёх разных мест качало музыкальные файлики, каждое скачивание шло в отдельном потоке, а на канвасе можно было наблюдать за процессом скачивания любого из файликов. Всё отлично работало и не подвисало ![]() ![]() -------------------- У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! ![]() |
|||
|
||||
![]() ![]() ![]() |
FAQ раздела лежит здесь! |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |