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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2014, 21:22   #1
stasa9711
Форумчанин
 
Регистрация: 01.10.2012
Сообщений: 106
По умолчанию как работает поток ?

добрый день , насчет потоков , в целом я понимал как работает многопоточность , но вот возникла такая ситуация , где я усомнился в верности своих знаний. Все по порядку
1.Создаем поток :
Код:
Acc:=-1;
 Work:=true;
 for Thread:=1 to strtoint(sEdit1.TExt) do
  TS.Create(false);
 Thread:=strtoint(sEdit1.TExt);
2. В самой форме execute :
Код:
 
....работаю с акками ...

dec(Thread);

 if Thread =0 then begin showmessage('completed');
  stop();
  end;
     Synchronize(Sync);
3.Не происходит уменьшение потоков

Вот, что я заметил : загружаю 3 аккаунта для работы в многопоточности , если я ставлю 4 потока , то по окончанию аккаунтов , потоков остается 1 .Благодаря функции dec(Thread); т.е снижение потоков. И тем самым не выполняется условие завершение многопоточности.А если поставит 3 потока , то условие выполняется Thread =0 т.е если так смотреть , то я если загружу 100 аккаунтов мне нужно ставить 100 потоков чтоль ? чтоб для каждого хватило ?


Объявление потока :
Код:
   TS = class(TThread)
  private
   FLogin:string;
   FPassword:string;
   Rezult:Integer;
   balance: string;
  protected
    procedure Execute; override;
  public
    procedure Sync;
    constructor Create(CreateSuspended: Boolean);
  end;
Код кнопки для запуска потока :
Код:
var
   num:TDateTime;
   hours, min, sec, msec:word;
begin
  num:=Time;


 
  if (Form1.sComboBox1.ItemIndex=1) or (Form1.sComboBox1.ItemIndex=2) then
  begin
  proxymode:='socks';
  end;

  if Form1.sComboBox1.ItemIndex=0 then
  begin
  proxymode:='http';
  end;

  sProgressbar1.Max:=Accounts.Count;
 Accounts.Add('lol'+razd+'lol');
 count:=accounts.Count;
 Acc:=-1;
 NP:=-1;
 Work:=true;
 sLabel14.Caption:='0';
  //showmessage(inttostr(count));

 sLabel14.Caption:=IntToStr(Accounts.Count);
 for Thread:=1 to strtoint(sEdit1.TExt) do
  TS.Create(false);
 Thread:=strtoint(sEdit1.TExt);
Код потока execute :
Код:
var CurAcc, TP:integer;
    HTTP:THTTPSend;
    IP, Port,s:string;
    data:TStringStream;
     I: integer;
  IdMes: TIdMessage;
  POP3:TIdPOP3;
    HTML, src:TStringList;
begin
 while Work do
  begin
   CS.Enter;
    Inc(Acc);  Inc(NP);
    if Acc<Accounts.Count-1 then CurAcc:=Acc else Work:=false;
   
   CS.Leave;

   if Work then
    begin
        balance:='';
        s:='';
       // showmessage(inttostr(acc));
        count:= count-1;
     //copy login
     FLogin:=Copy(Accounts[CurAcc],1,Pos(razd,Accounts[CurAcc])-1);
     FPassword:=Copy(Accounts[CurAcc],Pos(razd,Accounts[CurAcc])+1,Length(Accounts[CurAcc]));

                             IdMes:=TIdMessage.Create(nil);
         POP3:=TIdPOP3.Create(nil);
 POP3.Host:='pop.mail.ru'; // адресс почтового сервера
    POP3.Port:=110;           // порт по которому будет осуществляться подключение
    POP3.Username:=FLogin; // Логин пользователя
    POP3.Password:=FPassword;   // пароль пользователя
    POP3.Connect; // подключение по протоколу POP3, по настрокам в компоненте IdPOP3, с именем POP3

    if pop3.Connected=true then begin


   pop3.Disconnect;




      Rezult:=1
      end else

     Rezult:=2;

     end else

     Rezult:=0;



     IdMes.Free;
     HTTP.Free;
     src.Free;
     data.Free;
  //     showmessage(balance);
      dec(Thread);

 if Thread < count then begin showmessage('completed');
  stopbrute();
  end;
     Synchronize(Sync);
stasa9711 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поток работает через раз D_E_N Общие вопросы Delphi 0 14.08.2013 10:31
Как защитить поток coNsept Общие вопросы C/C++ 2 24.09.2011 20:17
Поток. Не получается создать поток. Выдает ошибки при запуске bigory Общие вопросы по Java, Java SE, Kotlin 3 23.09.2010 00:40
Как создать поток record222 Помощь студентам 1 07.04.2010 01:09
Как остановить поток? Никки Win Api 3 06.12.2007 22:04