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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сохранить Handle потока в лист? 
:(
    Опции темы
Sergio
  Дата 13.2.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Здрасте. Вот код :
Код

class Listener extends Thread {
 private ArrayList ThList; 
   public Listener() {
    ThList = new ArrayList();
}
     public void run() {
      System.out.println("Start listenen Client");
     }
};


Как сохранять хэндли на потоки чтобы потом их убивать?. Если можно то примерчик. smile  Спасибо.

Это сообщение отредактировал(а) Sergio - 13.2.2007, 17:03
PM MAIL ICQ   Вверх
AntonSaburov
Дата 13.2.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Вообщем использовать можно ThreadGroup - он для этого и сделан.
Надо только конструктор сделать - посмотри в описании API
PM MAIL WWW ICQ   Вверх
Sergio
Дата 15.2.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Что-то я читал и не очень понял smile Можно ли ссылочку на русский АПИ или пример какой-нибуть приведите. smile Спасибо. 
PM MAIL ICQ   Вверх
batigoal
Дата 16.2.2007, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Цитата

ThreadGroup

Для того, чтобы отдельный поток не мог начать останавливать и прерывать все потоки подряд, введено понятие группы. Поток может оказывать влияние только на потоки, которые находятся в одной с ним группе. Группу потоков представляет класс ThreadGroup. Такая организация позволяет защитить потоки от нежелательного внешнего воздействия. Группа потоков может содержать другие группы, что позволяет организовать все потоки и группы в иерархическое дерево, в котором каждый объект ThreadGroup, за исключением корневого, имеет родителя.

Класс ThreadGroup обладает методами для изменения свойств всех входящих в него потоков, таких, как приоритет, daemon и т.д. Метод list() позволяет получить список потоков.


Добавлено @ 12:09 
А вообще, "убивать" потоки некорректно. Они должны умирать своей смертью, завершив свой цикл run().


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Sergio
  Дата 16.2.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Хочу создать 10 потоков и потом их остановить. Вот что я написал:
Код

public class Socket extends ThreadGroup {
    
  public  void run() {
   while(true) {
        int a=0;
        a++;
       }
    }
    
    public static void main(String[] args) {
        Socket[] sock = new Socket[10];
        for(int b=0; b<10; b++)
         {
          sock[b].run();                                   //<<< Запуск потока
         }        
    }
}

Как убить тепер эти потоки используя лист. 
Цитата

Метод list() позволяет получить список потоков.

P.S. Какие-то ошибки еще наблюдаются. Помогите найти smile 

Это сообщение отредактировал(а) Sergio - 16.2.2007, 15:20
PM MAIL ICQ   Вверх
batigoal
Дата 16.2.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Они у тебя и так умрут сразу smile

Циклы выполнят код своего метода run и прекратят свое существование.

Добавлено @ 12:47 
Подожди, а при чем тут сокеты? Мы говорим о многопоточности, или о сетевом взаимодействии?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Sergio
Дата 16.2.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Я делаю клиент и сервер. На сервере есть основной поток который слушает подключился ли кто и выделает потом отдельный поток под клиента. Вот и всё. 
P.S. Кто может какой нибудь пример показать? Буду благодарен.


PM MAIL ICQ   Вверх
LSD
Дата 16.2.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Код
public class MyThread extends Thread
{
  private boolean running = true;

  public MyThread(ThreadGroup group)
  {
    super(group, "NetThread");
  }

  @Override
  public void run()
  {
    while(running)
    {
      //do some here
    }
  }
  
  public void stopThread()
  {
    running = false;
  }
}

И когда надо будет остановить потоки вызываешь stopThread().


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sergio
  Дата 16.2.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



LSD, Я не могу так делать. (долго обьяснять smile ) Можно ли узнать ссылку на поток, который я хочу остановить(MyThread.stop()) Знаю что так нельзя, но мне именно так и надо. Помогите плз. 
Вот как я сделал:
Код

public class Socket extends Thread {
    
    public void run() {
    while(true) {    
        int a=0;
        a++;
      }
    }
    
    public static void main(String[] args) {
              Socket[] hr = new Socket[50]; 
        Socket my = new Socket();
           hr[0] = my;                               // <<<<<<<<< Ссылка на обьэкт 
                
        hr[0].stop();        
    }
}

Не знаю правильно ли это smile  Остановится так поток (my) ?????? Если нет то напишите как правильно будет. Спасибо.

Это сообщение отредактировал(а) Sergio - 16.2.2007, 15:47
PM MAIL ICQ   Вверх
batigoal
Дата 16.2.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Sergio, даже документация говорит, что пользоваться этим методом небезопасно, и что он - устаревший.

Цитата(Sergio @  16.2.2007,  15:59 Найти цитируемый пост)
долго обьяснять

Да уж объясни smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Sergio
Дата 16.2.2007, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



batigoal, ты о безопасности не безпокойся. Ты лучше взгляни на код правильно ли я написал??? Остановится поток?
Мне в 17-00 надо уже роботу показывать smile 

Это сообщение отредактировал(а) Sergio - 16.2.2007, 16:16
PM MAIL ICQ   Вверх
batigoal
Дата 16.2.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Цитата(Sergio @  16.2.2007,  17:09 Найти цитируемый пост)
batigoal, ты о безопасности не безпокойся. Ты лучше взгляни на код правильно ли я написал??? Остановится поток?

Да возьми и проверь, что спрашивать-то?

Цитата(Sergio @  16.2.2007,  17:09 Найти цитируемый пост)
Мне в 17-00 надо уже роботу показывать smile 

Если тебе нужен не нормальный код, а "чтобы было", тогда интерес к беседе резко падает.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Sergio
Дата 17.2.2007, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Всё роботает. Показал код - оценили smile Всем спасибо. Кому интересно вот что я написал:

Код

/* Generated by Together */

package com.train.team4.server;
import javax.swing.JOptionPane;
import java.util.*;

public class SocketReceiver extends IReceiver {
    private SocketProperty theProperty;
    private String IP;
    private int Port;
    MainThread NewMainThread;
    private boolean Terminated = false;
    private int ConnectSock;
    private int hMas[];
    private int Count;
    
    public native int DLLStarting(String ip,int port);
    public native int DLLAccept();
    public native int DLLInThread(int connectSock);
    public native void DLLStoping();
    public native void DLLStopSocket(int sock);
    
    public SocketReceiver(IProperty aProperty) {
        
        theProperty = (SocketProperty)aProperty;
             }   
        
    static {
        System.loadLibrary("tcpserver_dll");
    }
    
    public int Starting() {
    Count = 0;
    hMas = new int[10];
NewMainThread = new MainThread();
            IP = theProperty.getIP(); 
        Port = theProperty.getPort();
            DLLStarting(IP,Port);
                  this.ReceiverText();     
           return 1;
    }
    
    public void ReceiverText() {
            JOptionPane.showMessageDialog(null, "ReceiveText!");  
        NewMainThread.start();
                 
    }    
    
    public int Stoping() {
        for(int a=0; a<10; a++)
                  {
                   DLLStopSocket(hMas[a]);
                  }
        Terminated=true;
                NewMainThread.stop();                   //<<<<<<Остановка потока (основного)
        DLLStoping();
        return 1;                 
    }
    
    public void addMessageListener(IReceiverListener lis) {
            theReceiverListener = lis;
    }
    
    private void AddTo(String a,String b,String c,String d,String e) {
      theReceiverListener.onReceiverData(a, b, c, d, e);
           }
//---------------------------------------------------------    
    class MainThread extends Thread {
        
        public void run() {
            
             while (true) {
             ConnectSock = DLLAccept();
              hMas[Count++] = ConnectSock; 
             InThread NewInThread = new InThread(ConnectSock);
             NewInThread.start();
             
            }         
        }
    }    
//---------------------------------------------------------    
    class InThread extends Thread {
         private int _ConnectSock;
         private int ExitThread;

        public InThread(int Sock) {
            _ConnectSock = Sock;
                    ExitThread = 0;
                  }

        public void run() {
            
         while(true) {
          if (ExitThread==DLLInThread(this._ConnectSock))  {break;}
                                  
            }            
        }
    }
}

P.S. Это серверная часть TCP технологии с использованием JNI Wizards.
Dll функции написаны на С++ (где присутствует префикс DLL)
PM MAIL ICQ   Вверх
powerOn
Дата 17.2.2007, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(Sergio @  17.2.2007,  00:54 Найти цитируемый пост)
true;
                NewMainThread.stop();                   //<<<<<<Остановка потока (основного)


мда.... я бы не оценил...
дока.  smile 



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
LSD
Дата 17.2.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Sergio @  17.2.2007,  00:54 Найти цитируемый пост)
Показал код - оценили

И на сколько они оценили незакрытые сокеты, и неосвобожденные мониторы? smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




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


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

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