Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

36K
30 марта 2013 года
Pcrepair
64 / / 16.01.2011
Добрый день. Есть код
Основной поток:
[ 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?
8
31 марта 2013 года
mfender
3.5K / / 15.06.2005
Никак. Нужно потоку сказать Suspend или Terminate, и дождаться пока он сам остановится.
8
31 марта 2013 года
mfender
3.5K / / 15.06.2005
Попробуй убивать поток по Terminate. У него есть даже свойство FreeOnTerminate. Вот его поставь в true где конструируешь. А сокет уничтожай в деструкторе TThread. По идее он должен убиться даже в случае отключения электричества.
36K
31 марта 2013 года
Pcrepair
64 / / 16.01.2011
все понятно, всем спасибо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог