|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
TIdThread - как немедленно остановить поток и освободить его?
Есть класс TIdThread (Входит в состав Indy9).
Имеется глобальная переменная, в которой содержится класс-наследник TIdThread. Требуется немедленно остановить поток и освободить (Free) его. но это не получается: Если использовать методы Stop или Terminate, то поток завершится, когда выполнится до конца, а нужно немедленная остановка. Если использовать такой код: Код:
if Assigned(LoginThread) then begin if LoginThread.Stopped=False then begin LoginThread.Suspended:=True; LoginThread.Terminate; end; LoginThread.Free; end; Последний раз редактировалось VcSaJen, 28.07.2011 в 14:15. |
#2
|
||||
|
||||
зачем вообще использовать TIdThread, достаточно TThread. что касается немедленной остановки потока, то метод Terminate делает всего лишь:
Код:
procedure TThread.Terminate; begin FTerminated := True; end; Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Цитата:
|
#4
|
||||
|
||||
нет ничего невозможного: после вызова Terminate нужно вызвать Disconnect у TIdHTTP. тогда его вызов Get\Post в потоке сразу завершится Exception. ну а в Execute обработать это исключение.
Код:
TThread.Terminate; TIdHTTP.Disconnect; TThread.WaitFor; TThread.Free; Пишу программы за еду. __________________ |
#5
|
|||
|
|||
Спасибо, это сработало.
|