Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Редкий тип зависания TIdHTTP.Get(), Возникает в 0.1% случаев 
:(
    Опции темы
MoDErahN
Дата 22.3.2012, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.

Пишу небольшую тестирующую софтинку, которая делает большое количество http запросов в отдельных потоках через TIdHTTP.

Периодически метод TIdHTTP.Get() подвисает на подключении. Делаю по таймауту TIdHTTP.Socket.Close() из другого потока. В 99,9% случаев Get отвисает, и, как положено, вываливается с исключением. И все бы хорошо, но остается 0.1% случаев, когда Get после закрытия сокета не отвисает, вешая поток до скончания веков.

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

Оставался один вариант, брутально глушить поток через ThreadTerminate() и подчищать максимум мусора вручную (благо ошибка не очень частая, утечка не очень велика). Но, опять же, иногда после вызова ThreadTerminate() у меня повисает первичный поток, что уж совсем неприемлимо.

Возникают два вопроса:
1) Можно ли что-то сделать в случае подвисания Get чтобы он вылетал не с 99,9% вероятности, а со всеми 100%.
2) Если нельзя, то что можно делать не так, убивая поток через ThreadTerminate(), из-за чего иногда может виснуть первичный поток. Буду рад любым предположениям.

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

PS: И да, я в курсе, что TerminateThread оставит в памяти стек и прочие плюшки с истекшим сроком годности, но в данном случае я готов на эти жертвы.

PSPS: Чуть не забыл, вся синхронизация осуществляется через первичный поток и TerminateThread осуществляется из него же. Т.е. вторичный поток не может быть убит, когда он блокирует какой-либо другой поток. (потому что он блокирует только первичный поток, и соответственно, не может быть в это время убит, т.к. TerminateThread осуществляется из первичного же потока)

Это сообщение отредактировал(а) MoDErahN - 22.3.2012, 23:52
PM MAIL   Вверх
Alexeis
Дата 23.3.2012, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(MoDErahN @  23.3.2012,  00:23 Найти цитируемый пост)
Да и ладно бы себе просто вешал, можно было бы запустить новый поток, но он же ж, гадина, выжирает процессор на максимум.

  Включить Debug Dcu, поставить программу на паузу, да глянуть где крутиться злосчастный поток.  


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MoDErahN
Дата 23.3.2012, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Крутится он внутри реализации TIdHTTP инфа 100%, и если запустить туда свои шаловливые ручки, то, боюсь, энтропия его поведения только возрастет.
Но спасибо, покопаюсь в этом направлении.

Это сообщение отредактировал(а) MoDErahN - 23.3.2012, 11:08
PM MAIL   Вверх
MetalFan
Дата 23.3.2012, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Если версия индей не последняя, то рекомендую обновиться.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
MoDErahN
Дата 24.3.2012, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


Опытный
**


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

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



а интернет случаем не барахлит?


--------------------
Всех программистов надо посадить на целероны, что бы впредь головой думали что пишут.
user posted image
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

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


 




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


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

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