![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
MoDErahN |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Включить Debug Dcu, поставить программу на паузу, да глянуть где крутиться злосчастный поток. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
MoDErahN |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.6.2009 Репутация: нет Всего: нет |
Крутится он внутри реализации TIdHTTP инфа 100%, и если запустить туда свои шаловливые ручки, то, боюсь, энтропия его поведения только возрастет.
Но спасибо, покопаюсь в этом направлении. Это сообщение отредактировал(а) MoDErahN - 23.3.2012, 11:08 |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
Если версия индей не последняя, то рекомендую обновиться.
-------------------- There are always someone smarter than you... |
|||
|
||||
MoDErahN |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.6.2009 Репутация: нет Всего: нет |
Снимок недельной давности.
|
|||
|
||||
DYUMON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 321 Регистрация: 17.6.2006 Где: Новосибирск Репутация: нет Всего: 3 |
а интернет случаем не барахлит?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |