Как получить доступ к методу потока(TThread) из основного потока?
Основной поток:
[ code ]
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;
[ /code ]
Поток загрузчика:
[ code ]
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. [ /code ]
Вопрос: как вызвать AbortConnection из основного потока, для принудительного завершения работы TidHttp?
Никак. Нужно потоку сказать Suspend или Terminate, и дождаться пока он сам остановится.
Попробуй убивать поток по Terminate. У него есть даже свойство FreeOnTerminate. Вот его поставь в true где конструируешь. А сокет уничтожай в деструкторе TThread. По идее он должен убиться даже в случае отключения электричества.
все понятно, всем спасибо