2014-09-20 1 views
0

Вопрос в том, что HTTP реализуется в потоке с использованием IdHTTP. Я хочу, если нужно, закончить поток. Для этого я периодически проверяю свойство Terminated в событии HTTPWork IdHTTP. Если установлено свойство terminate, то вызывается метод IdHTTP.disconnect и поток завершается.Delphi: как изящно завершить поток, который использует IdHTTP во время таймаута соединения?

Это прекрасно работает, однако рассмотрим следующий проблемный сценарий:

По какой-то причине сеть идет вниз, когда начинается поток. По истечении тайм-аута возникает ошибка сокета, которая также в порядке, однако во время интервала таймаута из IdHTTP не происходит никаких событий, и поэтому нет способа проверить завершенное свойство. Итак, вопрос заключается в том, как изящно прекратить поток, который использует IdHTTP во время таймаута соединения?

+6

Не контролируйте поток выполнения потока событиями 'TIdHTTP'. – TLama

+0

@TLama: IdHTTP действительно работает. Есть ли другая альтернатива? – user2046977

ответ

2

Самый изящный подход - просто позволить потоку тайм-аут, не пытайтесь его заставлять. Но если вы вынуждены это сделать, вы можете вызвать TIdHTTP.Disconnect() из другого контекста потока, например, для того, чтобы остановить рабочий поток. Любая последующая операция сокета или любая выполняемая операция немедленно выходят из строя с ошибкой сокета в контексте рабочего потока.

Смежные вопросы