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

Тема в разделе "Delphi - Сети", создана пользователем superprogger, 30 мар 2013.

  1. superprogger

    superprogger Member

    Регистрация:
    10 сен 2011
    Сообщения:
    5
    Симпатии:
    0
    Добрый день. Есть код
    Основной поток:

    Код (Delphi):
    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;
    Поток загрузчика:

    Код (Delphi):
    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?
     
  2. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    так как у вас - никак, надо ThreadLoder делать свойством формы, как минимум
     
  3. superprogger

    superprogger Member

    Регистрация:
    10 сен 2011
    Сообщения:
    5
    Симпатии:
    0
    все понятно, всем спасибо.
     
Загрузка...

Поделиться этой страницей