Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> аккуратно убить поток 
:(
    Опции темы
zss
Дата 18.7.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есть объект, отвечающий за сетевое соединение через TcpClient (client).

все его методы синхронизированы через lock для того, чтоб вызывать их можно было только последовательно
т.к. сервер работает в режиме запрос-ответ.

на удаленной машине при запуске приложения происходит запуск отдельного потока
который постоянно обращается к серверу и запрвшивает у него данные.

запуск потока всегда происходит удачно, но как только я хочу остановить поток
Код

public void StopThread ()
{
    thread.Abort();
    thread.Join();
}

...

private void MainThread()
{
    try
    {
        while (true)
        {
            // запрос данных у сервера и отображение их
        }
    }
    catch (ThreadAbortException) 
    {
        client.Flush(); // это TcpClient.Flush();
    }
    catch (Exception)
    {
        client.Close(); // это NetworkStream.Flush(); NetworkStream.Close(); TcpClient.Close();
        this.Invoke(ErrorMessage, "Соединение разорвано");
    }
}


то иногда происходит висяк, а сервер говорит, что произошел обрыв соединения.

Дело в том, что thread.Abort() может быть вызван в тот момент, когда читается или вишется в сокет.
Для это я вызываю Flush(). Но иногда до него даже не доходит, а иногда виснет на нем.

В чем может быть косяк ?  
PM MAIL ICQ   Вверх
mr.DUDA
Дата 18.7.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

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



Это из-за Join'а, наверно. В обработчике ThreadAbortException нужно выставлять какой-нибудь флаг, по которому метод StopThread может определить, что когда уже можно прибить поток окончательно Join-ом, а когда ещё нельзя (т.к. выполняется client.Flush). 


--------------------
user posted image
PM MAIL WWW   Вверх
zss
Дата 19.7.2006, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



но тогда придется крутиться и ждать этот флаг - что не очень хорошо smile

Добавлено @ 08:02 
и еще - почему это происходит из-за Join - ведь он просто ждет завершегия потока 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 19.7.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

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



Цитата(zss @  19.7.2006,  08:01 Найти цитируемый пост)
и еще - почему это происходит из-за Join - ведь он просто ждет завершегия потока 

Честно говоря, просто навскидку сказал smile, сам не пробовал. Наверно сбило с толку слово terminate в описании метода smile 


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

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


 




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


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

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