Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Общие вопросы > Редкий тип зависания TIdHTTP.Get() |
Автор: MoDErahN 22.3.2012, 23:23 |
Здравствуйте. Пишу небольшую тестирующую софтинку, которая делает большое количество 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 23.3.2012, 11:07 |
Крутится он внутри реализации TIdHTTP инфа 100%, и если запустить туда свои шаловливые ручки, то, боюсь, энтропия его поведения только возрастет. Но спасибо, покопаюсь в этом направлении. |
Автор: MetalFan 23.3.2012, 15:08 |
Если версия индей не последняя, то рекомендую обновиться. |
Автор: MoDErahN 24.3.2012, 12:02 |
Снимок недельной давности. |
Автор: DYUMON 28.3.2012, 12:16 |
а интернет случаем не барахлит? |