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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Thread: Завершение подпроцесса? 
V
    Опции темы
Kalisnik
Дата 16.3.2012, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

public class Conn_Sock extends Thread {
    
    private ServerSocketConnection ssc;
    private StreamConnection sc;
    private InputStream is;
    
    Conn_Sock(String s){
        super(s);
    }
    
    public void run(){
        String s = "";
        try{
            ssc = (ServerSocketConnection)Connector.open("socket://:9002");
            StringBuffer sb = new StringBuffer();
            try{
                sc = ssc.acceptAndOpen();
                is = sc.openInputStream();
                int ch = 0;
                while ((ch = is.read()) != -1){
                sb.append((char)ch);
                }
            } finally{
                s = sb.toString();
                SocetIn.getMidlet().getForm().append(s);
                ssc.close();
                sc.close();
                is.close();
            }
        } catch (IOException x) {
        }
    }
}



1. Серверный сокет, при прослушке порта, ставит подпроцесс в ожидание. Можно ли как-то этот подпроцесс завершить? 

2. При завершении мидлета конечно все подпроцессы убиваются?

Это сообщение отредактировал(а) Kalisnik - 16.3.2012, 20:48
PM MAIL   Вверх
Pawl
Дата 18.3.2012, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Kalisnik @  16.3.2012,  20:48 Найти цитируемый пост)
Можно ли как-то этот подпроцесс завершить? 

Наверно, да.
сделать флаг, который будер проверяться в run. Что-то типа 
Код

public void run() {
    do {
        //запустить прослушку
        if (flag) {
            //закрыть прослушку
        }
    while(!flag);
}

Ну а значение флага можно менять, например, нажатием кномпочки smile .

Добавлено через 3 минуты и 34 секунды
да, перед while нужна скобочка


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Kalisnik
Дата 18.3.2012, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



К сожалению не все так просто. Метод acceptAndOpen() переводит весь подпроцесс в состояние ожидания до тех пор, пока не будет образовано соединение. А если соединения вообще не последует, то весь поток соответсвенно будет висеть на методе acceptAndOpen() и флаг работать не будет. Все это не страшно, если java-машина мобильного устройства убивает эти подпроцессы после завершения мидлета.
PM MAIL   Вверх
Pawl
Дата 18.3.2012, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Kalisnik @  18.3.2012,  12:31 Найти цитируемый пост)
Все это не страшно, если java-машина мобильного устройства убивает эти подпроцессы после завершения мидлета.

А что по этому поводу говорит документация?


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Kalisnik
Дата 18.3.2012, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Pawl, с английским не очень ) По этому и спросил )

З.Ы. здается мне что этот подпроцесс в таком состоянии ни как не убить. Метода stop() в javaMe нету. Так что, по логике, виртуальная машина должна эти потоки убивать при выходе.

Это сообщение отредактировал(а) Kalisnik - 18.3.2012, 17:22
PM MAIL   Вверх
Pawl
Дата 18.3.2012, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Kalisnik @  18.3.2012,  17:19 Найти цитируемый пост)
Метода stop() в javaMe нету

Я Вам скажу больше, метод stop вообще deprecated  smile !

Цитата(Kalisnik @  16.3.2012,  20:48 Найти цитируемый пост)
При завершении мидлета конечно все подпроцессы убиваются?

Может, имеет смысл еще и принудительно прописать закрытие соединения в методе destroyApp мидлета? Для пущей уверенности, так сказать!


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Kalisnik
Дата 22.3.2012, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пришла сумасшедшая мысль  smile: а что если разблокировать метод acceptAndOpen() другим подпроцессом того же приложения, создав в нем клиентский сокет и отправив на серверный сокет первого подпроцесса запрос на подключение?  smile smile 

З.Ы. Хотя наверно глупость сморозил ))) Разве что на мобильник Java Apache ставить )))

Это сообщение отредактировал(а) Kalisnik - 22.3.2012, 19:46
PM MAIL   Вверх
Kalisnik
Дата 29.3.2012, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Kalisnik @  22.3.2012,  19:43 Найти цитируемый пост)
Пришла сумасшедшая мысль  : а что если разблокировать метод acceptAndOpen() другим подпроцессом того же приложения, создав в нем клиентский сокет и отправив на серверный сокет первого подпроцесса запрос на подключение?    З.Ы. Хотя наверно глупость сморозил ))) Разве что на мобильник Java Apache ставить )))



Смешно, но... на эмуляторе работает. Процесс отмораживается и завершается по флагу. smile
PM MAIL   Вверх
oxigen
Дата 29.3.2012, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не совсем понятно, зачем это нужно. Пусть себе висит в acceptAndOpen().
Надо будет закрыть - вон Pawl написал, делаешь ssc.close(); При этом из acceptAndOpen() должен будеть сам выпасть с эксепшеном.

Это сообщение отредактировал(а) oxigen - 29.3.2012, 12:09
PM MAIL   Вверх
Kalisnik
Дата 30.3.2012, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(oxigen @  29.3.2012,  10:56 Найти цитируемый пост)
При этом из acceptAndOpen() должен будеть сам выпасть с эксепшеном.


Да, действительно. Все проще чем казалось.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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