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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2012, 10:34   #1
Test3r
Новичок
Джуниор
 
Регистрация: 03.06.2012
Сообщений: 1
По умолчанию Потоки. Нагрузка на ЦП.

Задача - проверять списки сайтов на определённую страницу, работает шустро, быстро, загрузка ЦП в районе 10%, но через несколько минут работы (списки сайтов большие) ЦП - 100%. Что делать, как поступить?

Вступление, ну кому нужно...
Код:
  TMyThread = class(TThread)
  private
    FOnDone: TNotifyEvent;
    Rez : Integer;
  protected
    procedure Execute; override;
    procedure SyncMe;
    procedure WorkEnd;
  public
    Pass: String;
    Site: string;
    IP: string;
    Port: Integer;
    constructor Create(CreateSuspended: Boolean);
    destructor Destroy; override;
    property OnDone: TNotifyEvent read FOnDone write FOnDone;
  end;    

var
  Form1: TForm1;
  i:string; z:Byte;
  Sites:Tstringlist;
  t:integer;
  Work,check:boolean;
  GoodFile, GoodFile2, GoodFile3: textfile; 

implementation

{$R *.dfm}

{ TMyThread }

constructor TMyThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
  FreeOnTerminate := True;
end;
                                                         
destructor TMyThread.Destroy;
begin
  inherited;
end;
Сам поток

Код:
procedure TMyThread.Execute;
var
    HTTP: TIdHTTP;
    a:string;
begin
     HTTP:=TIdHTTP.create;
     HTTP.HandleRedirects:=false;
//code
     try
      a:=HTTP.Get('http://'+Site+'/stranica.php');
     except
     end;
     if Pos('key', a)<>0 then rez:=1
     else
     rez:=0;
//code
     Synchronize(SyncMe);//Єръ фюыцэю сvЄ№) фтр ёшэър
     HTTP.Free;
     Synchronize(WorkEnd);
end;
Код:
procedure TMyThread.SyncMe;
begin
case Rez of
 1:
 begin
      Append(GoodFile);
      Writeln(GoodFile,'site');
      Closefile(GoodFile);
 end;
// 2:
// 3:
//etc...

end;
end;
Код:
procedure TMyThread.WorkEnd;
   begin
  if Assigned(FOnDone) then
  FOnDone(Self);
end;
Код:
procedure TForm1.btn1Click(Sender: TObject);
var
  m: TMyThread; b:integer;
begin
  if Sites.Count<>0 then
  begin
  for b := 0 to Min(StrToIntDef(Edt3.Text, 0), Sites.Count - 1) do
  begin
  m := TMyThread.Create(True);
  m.Site:=Sites[0];
  Sites.Delete(0);
  m.OnDone := DoneWork;
  m.Resume;
  end;
  end;
Код:
procedure TForm1.DoneWork(Sender: TObject);
var
  m: TMyThread;
begin
  lbl6.Caption:=IntToStr(Sites.Count);//осталось
  if Sites.Count > 0 then
  begin
    m := TMyThread.Create(True);
    m.Site:=Sites[0];
    Sites.Delete(0);
    m.OnDone := DoneWork;
    m.Resume;
end;

Последний раз редактировалось Test3r; 03.06.2012 в 10:56.
Test3r вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нагрузка на сайт Sergey2 PHP 8 03.08.2011 15:27
Нагрузка на процессор awecs Win Api 0 21.11.2010 17:30
Нагрузка на чата. Izhic PHP 2 04.06.2009 10:22
Преобразование типов - большая нагрузка на ЦП ArtUrlWWW Общие вопросы .NET 1 19.05.2009 14:41
Критическая нагрузка на mysql сервер Voldemar SQL, базы данных 1 11.08.2008 18:59