Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2010, 16:08   #1
CraftR14
Все к лучшему...
Форумчанин
 
Регистрация: 06.04.2010
Сообщений: 112
Подмигивание Цикл и Многопоточность.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, StdCtrls, ExtCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    IdHTTP1: TIdHTTP;
    ListBox1: TListBox;
    Edit4: TEdit;
    Button2: TButton;
    Timer1: TTimer;
    Edit3: TEdit;
    Button3: TButton;
    ProgressBar1: TProgressBar;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);

 private
    { Private declarations }
  public
    { Public declarations }
  end;
  
  TNewThread = class(TThread)
  private
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean);
  end;
var
  Form1: TForm1;

implementation

{$R *.dfm}




constructor TNewThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;

procedure TNewThread.Execute;
var
  i:Integer;
  s,k:string;
    j:Integer;
begin
for  i:=StrToInt(Form1.Edit1.Text) to StrToInt(Form1.Edit2.Text) do
begin
Application.ProcessMessages;
k:=Form1.IdHTTP1.Get('http://google.ru/'+IntToStr(i));
Form1.ListBox1.Items.Add('ID:['+IntToStr(i)+']  '+k);
Application.ProcessMessages;
end;

end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  TNewThread.Create(false);
  end;


procedure TForm1.Button2Click(Sender: TObject);
begin

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.ListBox1.Items.Clear;
end;

end.
Собственно я засунул в поток но так как тут цикл то я вообще не понимаю как создать к примеру 20 потоков и что бы каждый делал свое действие в цикле
т.е. первый поток качает первую страницу и добавляет в листбокс второй поток качает вторую страницу добавляет в листбокс... то есть как то так...

Помогите пожалуйста кодом.......
CraftR14 вне форума Ответить с цитированием
Старый 04.06.2010, 17:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну предположим у тебя есть массив с ссылками
Добавляешь в класс потока свойство URL:String , которое применяешь в
Код:
procedure TNewThread.Execute;
var
  i:Integer;
  s,k:string;
    j:Integer;
 IdHTTP1:TIdHTTP;
begin
 IdHTTP1:=TIdHTTP1.Create(nil);
  k:=IdHTTP1.Get(url);
  Form1.ListBox1.Items.Add('ID:['+IntToStr(i)+']  '+k);
 IdHTTP1:=nil;
end;
А в клике вызываешь:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
 for i:=low(massiv) to high(massiv) do
  with TNewThread.Create(true) do begin
   url:=massiv[i];
   FreeOnTerminate:=true;
   Resume;
  end
 end;
Вот примерно так... Только я бы на твоем месте про синхронизацию не забывал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2010, 14:44   #3
CraftR14
Все к лучшему...
Форумчанин
 
Регистрация: 06.04.2010
Сообщений: 112
По умолчанию

Актуально еще) Так и не хрена не понел
Все в одном потоке делаю, код хороший навоял) а вот с потоками как то я все не на лажу))
Помогите все таки с кодом =\
CraftR14 вне форума Ответить с цитированием
Старый 11.06.2010, 18:53   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

procedure TNewThread.Execute;
var
i:Integer;
s,k:string;
j:Integer;
IdHTTP1:TIdHTTP;
begin
IdHTTP1:=TIdHTTP1.Create(nil);
k:=IdHTTP1.Get(url);
Form1.ListBox1.Items.Add('ID:['+IntToStr(i)+'] '+k);
IdHTTP1:=nil;
end;

вам сказали не забывайте про синхронизацию при использовании внешних (по отношению к классу TNewThread переменных (url) и объектов(Form1.ListBox.Items) (отмечены красным) или используйте локальные.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточность CrazyDude Общие вопросы Delphi 1 18.04.2010 19:00
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Многопоточность. newmister Общие вопросы Delphi 9 24.07.2009 12:54
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34