Как получить доступ к методу потока(TThread) из ос

 
0
 
Delphi, Kylix & Pascal
ava
Pcrepair | 30.03.2013, 09:49
Добрый день. Есть код
Основной поток:


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?
Kommentare (2)
ava
Illusion Dolphin | 30.03.2013, 09:54 #
Цитата

   //вот тут непонятно, как вызвать метод AbortConnection из запущенного потока  


Надо сделать чтобы поток был FreeOnTerminate := Fase; и хранить на него ссылку и через ссылку вызывать метод. Для освобождения ресурсов можно сделать Call-Back по окончанию работы потока и там уничтожать объект и обнулять ссылку.
ava
Pcrepair | 30.03.2013, 13:48 #
все понятно, всем спасибо.
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden