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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2015, 19:00   #11
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Это означает что? что она не может быть прочитана?
В этом случае до Pos (и соответствено ни до then ни до else ) дело может и не доходить. В дело вступает Exception. и сразу за ним treminate (потока)!!
можно сделать так
Код:
Name:='---'; /// "предустановку" ошибки.
и потом только
читать;
парсить;
и уcтанавливать УСПЕШНЫЙ результат (name:=....)
Ничего не поменялось. Но и это, как-то, неправильный выход же?
_ZixeL_ вне форума Ответить с цитированием
Старый 10.09.2015, 20:00   #12
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TNewThread = class(TThread)
  private
    Name: String;
    i: Integer;
  protected
    procedure Execute; override;
    procedure Sync;
  end;

var
  Form1: TForm1;
  CriticalSection1: TCriticalSection;
  Count: Integer;

implementation

{$R *.dfm}

{ TNewThread }

procedure TNewThread.Execute;
var
  IdHTTP: TIdHTTP;
  j: Integer;
  s: String;
begin
  FreeOnTerminate := True;
  IdHTTP := TIdHTTP.Create;
  IdHTTP.HandleRedirects := True;
  IdHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; rv:40.0) Gecko/20100101 Firefox/40.0';
    while Count < 20 do
      begin
        CriticalSection1.Enter;
        i := Count;
        Inc(Count);
        CriticalSection1.Leave;
          try
            s := IdHTTP.Get('http://***.ru/members/' + IntToStr(i) + '/');
            j := Pos('class="username">', s);
              if j <> 0 then Name := Copy(s, j + 17, PosEx('</h1>', s, j + 17) - (j + 17))
              else Name := '---';
            Synchronize(Sync);
          except
            Name := IdHTTP.Response.ResponseText;
            Synchronize(Sync);
          end;
      end;
  IdHTTP.Free;
end;

procedure TNewThread.Sync;
begin
  CriticalSection1.Enter;
  Form1.Memo1.Lines.Add(IntToStr(i) + #9 + Name);
  CriticalSection1.Leave;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  NewThread: Array[0..9] of TNewThread;
  i: Integer;
begin
  Inc(Count);
    for i := Low(NewThread) to High(NewThread) do TNewThread.Create(False);
end;

initialization
  CriticalSection1 := TCriticalSection.Create;
finalization
  CriticalSection1.Free;;

end.
ДралсяСошибками вне форума Ответить с цитированием
Старый 10.09.2015, 20:29   #13
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

ДралсяСошибками, как вариант.
Спасибо

Но всё равно, как вести счёт страниц с ошибками?

Последний раз редактировалось _ZixeL_; 10.09.2015 в 22:03.
_ZixeL_ вне форума Ответить с цитированием
Старый 10.09.2015, 22:05   #14
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Как вариант, добавить Label или что-то подобное и в него писать кол-во ошибок))
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TNewThread = class(TThread)
  private
    Name: String;
    i: Integer;
  protected
    procedure Execute; override;
    procedure Sync;
    procedure SyncError;
  end;

var
  Form1: TForm1;
  CriticalSection1: TCriticalSection;
  Error, Count: Integer;

implementation

{$R *.dfm}

{ TNewThread }

procedure TNewThread.Execute;
var
  IdHTTP: TIdHTTP;
  j: Integer;
  s: String;
begin
  FreeOnTerminate := True;
  IdHTTP := TIdHTTP.Create;
  IdHTTP.HandleRedirects := True;
  IdHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; rv:40.0) Gecko/20100101 Firefox/40.0';
    while Count < 20 do
      begin
        CriticalSection1.Enter;
        i := Count;
        Inc(Count);
        CriticalSection1.Leave;
          try
            s := IdHTTP.Get('http://******/members/' + IntToStr(i) + '/');
            j := Pos('class="username">', s);
              if j <> 0 then Name := IntToStr(i) + #9 + Copy(s, j + 17, PosEx('</h1>', s, j + 17) - (j + 17))
              else Name := IntToStr(i) + #9 + '---';
            Synchronize(Sync);
          except
            Name := IntToStr(i) + #9 + IdHTTP.Response.ResponseText;
            Synchronize(Sync);
            CriticalSection1.Enter;
            Inc(Error);
            CriticalSection1.Leave;
            Name := 'Ошибок: ' + IntToStr(Error);
            Synchronize(SyncError);
          end;
      end;
  IdHTTP.Free;
end;

procedure TNewThread.Sync;
begin
  Form1.Memo1.Lines.Add(Name);
end;

procedure TNewThread.SyncError;
begin
  Form1.Label1.Caption := Name;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  NewThread: Array[0..9] of TNewThread;
  i: Integer;
begin
  Inc(Count);
    for i := Low(NewThread) to High(NewThread) do TNewThread.Create(False);
end;

initialization
  CriticalSection1 := TCriticalSection.Create;
finalization
  CriticalSection1.Free;;

end.

Последний раз редактировалось ДралсяСошибками; 10.09.2015 в 22:33.
ДралсяСошибками вне форума Ответить с цитированием
Старый 10.09.2015, 22:23   #15
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

Спасибо огромное)
_ZixeL_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синхронизация потоков Fireblade-fan Общие вопросы Delphi 5 17.12.2012 01:57
Синхронизация потоков _Bers Общие вопросы C/C++ 5 23.12.2011 22:57
Синхронизация потоков добрый_фей Помощь студентам 5 09.12.2011 19:57
Синхронизация потоков alenka_ej Помощь студентам 0 03.06.2010 22:20