![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TidHTTP в потоке [D7, XP]
Паша777 © (2006-08-21 15:41:00)Подскажите плиз
Как осуществить запрос
ТidHTTP.Get(zapros, otwet);
и получить от него ответ
в потоке
Заранее спасибо
Паша777 (2006-08-22 01:39:00) [1]У меня с вышеприведенным мною кодом
до клика 1 поток
после клика сначала 5 затем 4 остается
поэтому и пишу может где напартачил......
Пусик спасибо огромное за помощь.....
Пусик (2006-08-21 19:17:00) [2]
> Разьясните пожалуйста, почему при нажатии на кнопку создается
> 3 потока и они не завершаются ?
Один поток главный, один создаешь ты, один создает Indy.
Твой уничтожается после Free, остается 2.
Если интересно, почему Indy оставляет поток, читай исходники.
Паша777 (2006-08-21 18:41:00) [3]Перенес [2] и получил
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdHTTP, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure OnThreadTerminate (Sender:TObject);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
type
THTTPThread=class (TThread)
FQ: String;
FResult: String;
procedure Execute; override;
constructor Create(const Query: String);
end;
implementation
{$R *.dfm}
constructor THTTPThread.Create(const Query: String);
begin
inherited Create(True);
FQ := Query;
FreeOnTerminate := True;
end;
procedure THTTPThread.Execute;
var
Idh: TIdHTTP;
begin
Idh := TIdHTTP.Create(nil);
try
FResult := Idh.Get(FQ);
except
FResult := '';
end;
Idh.Free;
end;
procedure TForm1.OnThreadTerminate(Sender:TObject);
begin
Memo1.Lines.Text:=THTTPThread(Sender).FResult;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with THTTPThread.Create(' http://ya.ru')do
begin
OnTerminate:=OnThreadTerminate;
Resume;
end;
end;
end.
Разьясните пожалуйста, почему
при нажатии на кнопку создается 3 потока
и они не завершаются ?
Спасибо
Сергей М. (2006-08-21 16:02:00) [4]
> Есть ли какиеь нибудь ньюансы в посылке запроса и получения
> ответа из потоков ?
Нет никаких нюансов.
А если есть проблемы, то излагай их подробно.
Паша777 (2006-08-21 16:00:00) [5]Извиняюсь за неточость формулировки
Создаются дополнительные потоки в программе
Каждый поток должен посылать свой запрос на различные сайты
и полученный ответ записывать в лог
Есть ли какиеь нибудь ньюансы в посылке запроса и получения ответа из потоков ?
Спасибо
Пусик (2006-08-21 15:53:00) [6]
THTTPThread=class
FQ: String;
FResult: String;
procedure Execute; override;
constructor Create(const Query: String);
end;
constructor THTTPThread.Create(const Query: String);
begin
inherited Create(True);
FQ := Query;
FreeOnTerminate := True;
end;
procedure THTTPThread.Execute;
var
Idh: TIdHTTP;
begin
Idh := TIdHTTP.Create(nil);
try
FResult := Idh.Get(FQ);
except
FResult := '';
end;
Idh.Free;
end;
TForm1=class(TForm)
private
procedure OnThreadTerminate(Sender: TObject);
procedure TForm1.OnThreadTerminate(Sender: TObject);
begin
Memo1.Lines.Text := THTTPThread(Sender).FResult;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with THTTPThread.Create(' http://ya.ru') do
begin
OnTerminate := OnThreadTerminate;
Resume;
end;
end;
Reindeer Moss Eater (2006-08-21 15:45:00) [7]Интереснее вопрос как умудриться сделать это не в каком бы то ни было потоке