![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Есть класс 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
|
|||
|
|||
|
Спасибо, это сработало.
|