![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день.
При клике на кнопку запускается поток, в котором только Код:
html:=idhttp1.get(site); //html, site - стринговые, глобальные Но, допустим на форме 10 кнопок, каждая задаёт переменной "site" определённый текст(ссыль). Вопрос вот в чём, как правильно остановить запрос idhttp и закрыть сокеты если при клике idhtpp1 уже пытается что-то загрузить? Что бы можно было хоть 500 раз кликать на кнопку, но результат всё равно придёт? |
|
#2
|
||||
|
||||
|
Disconnect не работает?
|
|
#3
|
||||
|
||||
|
Проверяйте контекст запроса на повтор перед отправкой. Управлять сервером - т.е. отказаться от посланного запроса вы не сможете.
|
|
#4
|
|||
|
|||
|
В общем почитав про инди, набросал вот это:
Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, idhttp;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type pot=class(tthread)
private
public
procedure execute; override;
end;
var
Form1: TForm1;
id:Tidhttp;
p:pot;
implementation
{$R *.dfm}
procedure pot.Execute;
var
s:string;
begin
if p.Terminated=false then s:=id.Get('http://.ru/');
if p.Terminated=false then id.Free;
if p.Terminated=false then id:=nil;
if p.Terminated=false then form1.Memo1.Lines.Add('готово');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Memo1.Lines.Add('Старт');
if id<>nil then
begin
p.Terminate;
id.Socket.Close;
id.Free;
id:=nil;
end;
id:=Tidhttp.Create(nil);
p:=pot.Create(true);
p.FreeOnTerminate:=true;
p.Priority:=tpnormal;
p.Resume;
end;
end.Этот код будет работать стабильно, или нужно что то добавить/исправить? Что бы не получилось такого, что после часа пользования программой она прикажет долго жить? |
|
#5
|
||||
|
||||
|
Этот код лучше не использовать.
|
|
#6
|
||||
|
||||
|
Цитата:
Ну хотя бы закодить корректно, например, часть того что ты накалякал будет выглядеть намного проще так: Код:
procedure pot.Execute;
var
s:string;
begin
if not p.Terminated then
begin
try
s:=id.Get('http://.ru/');
id.Disconnect;
finally
FreeAndNil(id);
end;
form1.Memo1.Lines.Add('готово');
end;
end;Зы, в тырнете куча примеров правильной многопоточки... |