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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2013, 01:06   #1
lokort
Новичок
Джуниор
 
Регистрация: 03.07.2013
Сообщений: 2
Вопрос Потоки

Не могу понять почему потоки берут одну и тужу ссылку столько раз сколько потоков потом следящую, а не каждый по 1 ссылке. помогите пожалуйста новичку.


Код:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, httpsend, RegExpr, sLabel,
  sSkinManager, sEdit, sSpinEdit, SyncObjs, sButton, Vcl.ExtCtrls, ssl_openssl,
  sMemo;
type
  TForm2 = class(TForm)
    sSpinEdit1: TsSpinEdit;
    sSkinManager1: TsSkinManager;
    sLabel1: TsLabel;
    sLabel2: TsLabel;
    sLabel3: TsLabel;
    sSpinEdit2: TsSpinEdit;
    sSpinEdit3: TsSpinEdit;
    sLabel4: TsLabel;
    Timer1: TTimer;
    sLabel5: TsLabel;
    sButton1: TsButton;
    sButton2: TsButton;
    sMemo1: TsMemo;

    procedure Timer1Timer(Sender: TObject);
    procedure sButton1Click(Sender: TObject);
    procedure sButton2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
 ns:string;
  end;

  type
  hell = class(TThread)
  private

  protected
     procedure memoadd;
    procedure Execute; override;
  end;


var
 Form2: TForm2;
 HTTP:THTTPSend;
 str,prx2:TStringList;
 reg2:TRegExpr;
 Strok:string;
 MyT:array of hell;
 cs:TCriticalSection;
implementation

{$R *.dfm}


procedure hell.Execute;
var i,p:integer;
z,x,c,v:integer;

begin

 i:=form2.sSpinEdit2.Value;
 p:=form2.sSpinEdit3.Value;

 cs.Enter;
for i:=0 to p do begin
 str:=TStringList.Create;
HTTP:=THTTPSend.Create;
HTTP.HTTPMethod('GET', 'http://mcskinsearch.com/browse/'+IntToStr(i));
str.LoadFromStream(HTTP.Document);
prx2:=TStringList.Create;
reg2:=TRegExpr.Create;
reg2.Expression:='<div title="(.*?)</div>';
 if reg2.Exec(str.Text) then repeat
 prx2.Add(reg2.Match[1]);
 until
 not
 reg2.ExecNext;
 x:=0;
 for z:=0 to prx2.Count-1 do begin
 Strok:=prx2.Strings[x];
 Strok:=Copy(Strok, 1, Pos('"', strok) - 1);
 Strok:=Trim(Strok);
 inc(x);
 Synchronize(memoadd);
 cs.Leave;
 end;


 end;
 end;

procedure hell.memoadd;
begin

 Form2.sMemo1.Lines.Add(Strok);
end;

procedure TForm2.sButton2Click(Sender: TObject);
var nw:string;
we:integer;
begin
for we:=0 to sSpinEdit1.value-1 do begin
   SetLength(MyT,we+1);
   MyT[we]:=hell.Create(true);
   MyT[we].Priority:=tpLowest;
   MyT[we].FreeOnTerminate:=True;
   Myt[we].Resume;
    end;
  end;

procedure TForm2.FormCreate(Sender: TObject);
begin
cs:=TCriticalSection.Create;
end;

procedure TForm2.sButton1Click(Sender: TObject);
begin
 sMemo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0))+'login.txt');
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
sLabel4.Caption:=(IntToStr(+sMemo1.Lines.Count));
end;


end.
а так же исходник.
http://rghost.ru/47175594

Последний раз редактировалось Stilet; 03.07.2013 в 08:03.
lokort вне форума Ответить с цитированием
Старый 03.07.2013, 01:34   #2
iworm2009
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 51
По умолчанию

возможно, потому что локальные переменные не должны быть глобальными
iworm2009 вне форума Ответить с цитированием
Старый 03.07.2013, 02:22   #3
lokort
Новичок
Джуниор
 
Регистрация: 03.07.2013
Сообщений: 2
По умолчанию

Переместил их всё ровно всё так же что то с синхронизации не так а что не пойму.
lokort вне форума Ответить с цитированием
Старый 03.07.2013, 02:55   #4
iworm2009
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 51
По умолчанию

по логике, при создании каждого потока (у каждого элемента массива MyT) i = 0 и далее по порядку в цикле возрастает
iworm2009 вне форума Ответить с цитированием
Старый 03.07.2013, 09:57   #5
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Установи рамки массива([номер первого элемента..номер конечного]).
Используй синхронизацию.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки с++ Алена_=))) Помощь студентам 0 26.12.2011 16:12
потоки AlexMe Общие вопросы Delphi 3 18.07.2011 05:17
Потоки Djeka(c) Помощь студентам 13 28.10.2010 08:28
Потоки Aleksey1989 Помощь студентам 2 27.10.2010 10:07
потоки Владимир1988 Помощь студентам 0 08.02.2010 23:12