Добрый день. Есть код Основной поток:
| Код | unit uMain; interface uses ........
type .......
var Main: TMain;
implementation uses uLoader; {$R *.dfm}
(*Запуск Потока загрузки страницы*) procedure TMain.Button1Click(Sender: TObject); var ThreadLoder: TLoader; begin ThreadLoder:=Tloader.Create(Edit1.Text); end;
(*Принудительная остановка процесса загрузки*) procedure TMain.Button2Click(Sender: TObject); begin //вот тут непонятно, как вызвать метод AbortConnection из запущенного потока end;
|
Поток загрузчика:
| Код | unit uLoader; interface uses Classes, idHTTP, SysUtils, Dialogs,Windows;
type TLoader = class(TThread) private FUrl:string; FHtml:string; FIdHttp:TidHTTP;
protected procedure Execute; override; function LoadHtmlPage(const Url:string):string; public constructor Create(AStr:string); destructor Destroy; override; procedure AbortConnection; end;
implementation
constructor TLoader.Create(AStr:string); begin inherited Create(False); (*Поток создаем в состоянии ЗАПУСК*) FIdHttp := TIdHTTP.Create(nil); (*тут же создаем загрузчик*) FreeOnTerminate := True; (* Поток освободит ресурсы при окончании работы*) Priority := tpNormal; FUrl:=AStr; end;
destructor TLoader.Destroy; begin FreeAndNil(FIdHttp); inherited Destroy; end;
(*принудительное отключение TidHttp*) procedure TLoader.AbortConnection; begin if Assigned(FIdHttp) then (*если загрузчик запущен*) begin FIdHttp.Socket.Close; end; end;
function TLoader.LoadHtmlPage(const Url:string):string; begin try Result:=FIdHttp.Get(Url); except Exit; end; end;
procedure TLoader.Execute; begin FHtml:=LoadHtmlPage(FUrl); end;
end.
|
Вопрос: как вызвать AbortConnection из основного потока, для принудительного завершения работы TidHttp? |