Показать сообщение отдельно
  #5  
Старый 01.10.2015, 10:23
Avenger15 Avenger15 вне форума
Прохожий
 
Регистрация: 17.09.2015
Сообщения: 10
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

Цитата:
Сообщение от icWasya
1) перенести переменную i из метода Execute в поля класса Searcher.
2) из метода Execute убрать цикл.

3) Button1Click переписать так
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Threads: integer;
begin
  URL := Edit1.Text + '/memberslistxml/?xml=1&p=';
  for Threads := 0 to 4 do
  begin
    Th[Threads] := Searcher.Create(True);
    Th[Threads].i := Threads;
    Th[Threads].FreeOnTerminate := true;
    Th[Threads].Resume();
  end;
end;
Код:
type
  Searcher = class(TThread)
  private
    FHTTPS: THTTPSend;
    FLIST, FHTML: TStringList;
    FRegExp: TRegExpr;
  protected
    procedure Execute; override;
    procedure sync;
    procedure setheaders;
  public
    i: integer;
  end;

var
  Form1: TForm1;
  URL: string;
  Th: array [0 .. 5] of TThread;

implementation

{$R *.dfm}
{ Searcher }

procedure Searcher.Execute;
begin
  FHTTPS := THTTPSend.Create;
  FLIST := TStringList.Create;
  FHTML := TStringList.Create;
  FRegExp := TRegExpr.Create;
  try
    setheaders;
    FHTTPS.HTTPMethod('GET', URL + inttostr(i));
    begin
      FHTML.Clear;
      FHTML.LoadFromStream(FHTTPS.Document, TEncoding.UTF8);
      if pos('<steamID64>', FHTML.Text) > 0 then
      begin
        FRegExp.Expression := '<steamID64>(.*?)</steamID64>';
        if FRegExp.Exec(FHTML.Text) then
          repeat
            Synchronize(sync);
          until not FRegExp.ExecNext;
      end;
    end;
  finally
    FreeAndNil(FHTTPS);
    FreeAndNil(FLIST);
    FreeAndNil(FHTML);
    FreeAndNil(FRegExp);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Threads: integer;
begin
  URL := Edit1.Text + '/memberslistxml/?xml=1&p=';
  for Threads := 0 to 4 do
  begin
    Th[Threads] := Searcher.Create(True);
    Th[Threads].i := Threads;
    Th[Threads].FreeOnTerminate := True;
    Th[Threads].Resume();
  end;
end;
Сделал так , как вы сказали.
При компиляции ошибка:
Код:
[dcc32 Error] Project.pas(98): E2003 Undeclared identifier: 'i'
Ответить с цитированием