![]() |
|
|
|
|
#1
|
|||
|
|||
|
все походу...
Код:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,idhttp;
type
TMyThread = class(TThread)
private
FUrl: string;
public
constructor Create(CreateSuspended: Boolean; AUrl: string);
protected
procedure Execute; override;
procedure UpdateCaption;
end;
implementation
uses Unit1;
{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TMyThread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ TMyThread }
constructor TMyThread.Create(CreateSuspended: Boolean; AUrl: string);
begin
inherited Create(CreateSuspended);
FUrl := AUrl;
FreeOnTerminate := true;
end;
procedure TMyThread.Execute;
var
http: TIdHTTP;
str: TStringList;
begin
str := TStringList.Create();
http := TIdHTTP.Create(nil);
str.Text:= http.Get(FUrl);
str.SaveToFile(inttostr(random(222))+'.html');
http.Free;
str.free ;
sleep(5000);
Synchronize(UpdateCaption);
end;
procedure TMyThread.UpdateCaption;
begin
Form1.Memo2.Lines.Add(FUrl);
end;
end.Admin: Учимся пользоваться тегами! Последний раз редактировалось Admin, 24.01.2010 в 22:02. |
|
#2
|
|||
|
|||
|
Ну все правильно. Ты же используешь всего один компонент для скачивания. Если ты хочешь распаралелить работу, то создавай IdHTTP в каждом потоке свой.
|
|
#3
|
|||
|
|||
|
при нажатии на кнопку создаеться столько потоков сколько существует записей в memo1
допустим я создал 50 потоков. 1)как мне остановить вручнудю все эти 50 потоков и удалить их? 2)чтобы потоки удалились нужно в конце писать self.Terminate; self.free; ? или он сам удаляеться 3)как остановить например только 10-ый поток? подскажите пожалуйса. Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to Memo1.Lines.Count - 1 do begin
TMyThread.Create(false, Memo1.lines[i]);
end;
end;Код:
type
TMyThread = class(TThread)
private
FUrl: string;
public
constructor Create(CreateSuspended: Boolean; AUrl: string);
protected
procedure Execute; override;
procedure UpdateCaption;
end;
implementation
uses Unit1;
constructor TMyThread.Create(CreateSuspended: Boolean; AUrl: string);
begin
inherited Create(CreateSuspended);
FUrl := AUrl;
FreeOnTerminate := true;
end;
procedure TMyThread.Execute;
var
http: TIdHTTP;
str: TStringList;
begin
str := TStringList.Create();
http := TIdHTTP.Create(nil);
str.Text:= http.Get(FUrl);
sleep(7000);
str.SaveToFile(inttostr(random(222))+'.html');
http.Free;
str.free ;
Synchronize(UpdateCaption);
// self.Terminate;
//self.free;
end;
procedure TMyThread.UpdateCaption;
begin
Form1.Memo2.Lines.Add(FUrl);
end;Последний раз редактировалось Admin, 24.01.2010 в 22:03. |
|
#4
|
|||
|
|||
|
Весь вопрос: что значит остановить? Если вы хотите чтобы они нормально ликвидировались когда они сами отработают, то установите свойство FreeOnTerminate в true, а если при каких то условиях то можно попробовать использовать TEvent, временный тормоз потока это метод suspend, а чтобы его разрушить лучше вызвать destroy как и для любого другого объекта по моему
|