|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как остановить idhttp
Добрый день.
При клике на кнопку запускается поток, в котором только Код:
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; Зы, в тырнете куча примеров правильной многопоточки... |