Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2013, 09:36   #1
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию Как получить доступ к методу потока(TThread) из основного потока?

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

Код:
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?
Pcrepair вне форума Ответить с цитированием
Старый 30.03.2013, 10:11   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Как получить доступ к методу потока(TThread) из основного потока?
основной поток должен знать (точнее помнить) что он запустил
(глобальная переменная для этого вполне подойдет)
Код:
var
  mythread: TLoader;
а лучше private данные
Код:
 Tform1 =class(TFrom)
..
  private
  mythread: TLoader;
Код:
mythread:=TLoader.Create;
mythread.Abortconnection;
я знаю ответ как вызвать, но не знаю ответа как это будет работать.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.03.2013 в 10:29.
evg_m вне форума Ответить с цитированием
Старый 30.03.2013, 11:03   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Никак. В модуле формы и в методах формы Вам недоступна переменная, что ссылается на экземпляр потока, т.к. она ЛОКАЛЬНАЯ переменная только в одном методе!
пс. Сорри, не перегрузил страницу перед постом...
phomm вне форума Ответить с цитированием
Старый 30.03.2013, 14:52   #4
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

все понятно, всем спасибо.
Pcrepair вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить handle потока (TThread)? Pcrepair Общие вопросы Delphi 4 28.03.2013 11:31
спонтанная ошибка при синхронизации потока Thread и основного приложения(Посылка сообщений) Человек_Борща Общие вопросы Delphi 2 14.05.2011 22:25
THTTPCli, обработчик события выполняется в контексте основного потока profaller Работа с сетью в Delphi 4 08.02.2011 16:25
Как узнать номер потока из самого потока? GaMeSTeR Помощь студентам 0 03.12.2010 09:50
Как отследить завершение выполнения потока TThread? Трик Общие вопросы Delphi 3 24.10.2007 14:55