Как Получить Доступ К Методу Потока(tthread) Из Основного Потока?

  • Автор темы superprogger
  • Дата начала
S

superprogger

Добрый день. Есть код
Основной поток:

Код:
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?
 
M

-master-

так как у вас - никак, надо ThreadLoder делать свойством формы, как минимум
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!