Некоторая проблема с многопоточностью и сокетами
От: Alekseymir Украина  
Дата: 18.02.04 16:48
Оценка:
Hi, crowd;
Тута такая проблемка появилась....
Создал сокет...поставил на прослушку, в отдельном потоке — типа

....
while(!exit){
Socket sock = Socket.accept();
....
//тута создаем новый поток в котором идет обработка подключения(обмен инфой....)
}
......

все замечательно...вот ток когда я закрываю свое app тот поток в котором идет обработка подключения все еще жив....
то есть например когда в качестве клиента телнет мне нужно послать еще один байт чтоб все завершилось — телнет написал что connection lost...

Такое впечетление что поток — демон....а почему?...может кто т чтот подобное делал...поделится исходниками иль фрагментами....
Может я не правильно завершаю свое app?
В общем наверное вопрос в том как завершить app чтоб все потоки порожденные им умерли вместе с ним?
Re: Некоторая проблема с многопоточностью и сокетами
От: vguzev http://u.pereslavl.ru/~vadim/MCSharp/
Дата: 18.02.04 17:13
Оценка: -1
A>В общем наверное вопрос в том как завершить app чтоб все потоки порожденные им умерли вместе с ним?

Добавляй куда-нибудь в список (в ArrayList например) все запускаемые потоки, а при выходе из программы прибивай их вручную (через Thread.Abort например).


Вадим Б. Гузев
Вадим Б. Гузев
http://u.pereslavl.ru/~vadim/MCSharp/
Re: Некоторая проблема с многопоточностью и сокетами
От: Max Morozov Россия  
Дата: 18.02.04 17:19
Оценка: +1
Здравствуйте, Alekseymir, Вы писали:

A>В общем наверное вопрос в том как завершить app чтоб все потоки порожденные им умерли вместе с ним?


Установить Thread.IsBackground=true в этом потоке, но лучше предусмотреть логику выгрузки
Re: Некоторая проблема с многопоточностью и сокетами
От: Lion99rus Россия  
Дата: 18.02.04 17:27
Оценка: 4 (1)
Все зависит от того, как устроен поток обработки подключения. Поставь там ожидание события выхода с таймаутом 0. Когда завершаешь свое приложение — взводишь событие и поток завершится. Само событие надо создать в основном потоке, а указатель на него передать при создании потока через параметр.
Re[2]: Некоторая проблема с многопоточностью и сокетами
От: Alekseymir Украина  
Дата: 18.02.04 19:49
Оценка:
Здравствуйте, Lion99rus, Вы писали:

L>Все зависит от того, как устроен поток обработки подключения.

ну просто пытаемся чет читать пока можем...!=-1


Поставь там ожидание события выхода с таймаутом 0. Когда завершаешь свое приложение — взводишь событие и поток завершится. Само событие надо создать в основном потоке, а указатель на него передать при создании потока через параметр.

А екзампл не затруднит...и попроще плиз..я ток прехожу на сей язык с Java
Re[2]: Некоторая проблема с многопоточностью и сокетами
От: Alekseymir Украина  
Дата: 18.02.04 19:51
Оценка:
Здравствуйте, Max Morozov, Вы писали:

MM>Здравствуйте, Alekseymir, Вы писали:


A>>В общем наверное вопрос в том как завершить app чтоб все потоки порожденные им умерли вместе с ним?


MM>Установить Thread.IsBackground=true в этом потоке, но лучше предусмотреть логику выгрузки


А что значит логика выгрузки?
Re[2]: Некоторая проблема с многопоточностью и сокетами
От: Alekseymir Украина  
Дата: 18.02.04 19:55
Оценка:
Здравствуйте, vguzev, Вы писали:

A>>В общем наверное вопрос в том как завершить app чтоб все потоки порожденные им умерли вместе с ним?


V>Добавляй куда-нибудь в список (в ArrayList например) все запускаемые потоки, а при выходе из программы прибивай их вручную (через Thread.Abort например).



ЭЭЭ, а это правильно...бить потоки так .. а не давать им завершится? вроде нет(покрайней мере на эту тему много разговоров было...правда в контексте Java)


V>Вадим Б. Гузев
Re[3]: Некоторая проблема с многопоточностью и сокетами
От: vguzev http://u.pereslavl.ru/~vadim/MCSharp/
Дата: 19.02.04 09:19
Оценка:
>ЭЭЭ, а это правильно...бить потоки так .. а не давать им завершится? вроде нет(покрайней мере на эту тему много разговоров было...правда в контексте Java)

Это нормально, если в этих потоках отлавливается ThreadAbortException и правильно закрываются все соединения в catch'е. А это можно спокойно сделать если есть исходники


Вадим Б. Гузев
Вадим Б. Гузев
http://u.pereslavl.ru/~vadim/MCSharp/
Re[3]: Некоторая проблема с многопоточностью и сокетами
От: Max Morozov Россия  
Дата: 19.02.04 09:32
Оценка:
Здравствуйте, Alekseymir, Вы писали:

A>А что значит логика выгрузки?


Например, создать AutoResetEvent, передавать его в поток. Если необходимо завершить программу, то сигналить этот Event. А в потоке ждать на этом Event'е и выгружаться, когда event придет в сигнальное состояние
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.