Перейти к содержанию
Авторизация  
Po6oKon

Потоки, проблема

Рекомендуемые сообщения

Есть на дельфине кусок кода такой программы, тут проблема с потоками, с ними я сейчас учусь работать, никто не подскажет где может содержаться ошибка? По идее в label должны выводится значения и пуск GET Запросов, GET запросы как бы идут, но label не хочет работать и потоки все зависают.

 

 

 
TNewThread = class(TThread)
  private
  FAcc:string;
  FPas:string;
  rez:integer;
  protected
    procedure Execute; override;
  public
    procedure Sync;
    constructor Create(CreateSuspended: Boolean);
end;
 
var
  Form1: TForm1;
  accounts, result:tstrings;
  HTTP:TIdHTTP;
  PublicFile, PrivateFile: textfile;
  CS:TcriticalSection;
  acc, thread:integer;
  work:boolean;
  json: Isuperobject;
  login, apikey: string;
 
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormShow(Sender: TObject);
var
http:thttpsend;
begin
HTTP:=THTTPsend.Create;
result:=tstringlist.Create;
if HTTP.HTTPMethod('GET', 'http://androided.hostoi.com/al.php') then
begin
  result.LoadFromStream(HTTP.Document);
  json:=SO(result.Text);
  sLabel8.Caption:=json.S['count_lines'];
end;
http.Free;
result.Free;
end;
 
procedure TForm1.sButton1Click(Sender: TObject);
begin
if sOpenDialog1.Execute then
begin
  accounts.Clear;
  accounts.LoadFromFile(sOpenDialog1.FileName);
  sLabel4.Caption:=inttostr(accounts.Count);
end;
end;
 
procedure TForm1.sButton2Click(Sender: TObject);
begin
AssignFile(PublicFile, ExtractFilePath(Application.ExeName)+'public.txt');
Rewrite(PublicFile);
CloseFile(PublicFile);
AssignFile(PrivateFile, ExtractFilePath(Application.ExeName)+'private.txt');
Rewrite(PrivateFile);
CloseFile(PrivateFile);
sLabel5.Caption:='0';
sLabel6.Caption:='0';
Acc:=-1;
Work:=True;
sButton2.Enabled:=False;
sButton3.Enabled:=True;
sButton1.Enabled:=False;
sCheckBox1.Enabled:=False;
for Thread := 1 to 5 do
  TNewThread.Create(false);
Thread:=5;
end;
 
procedure TForm1.sButton3Click(Sender: TObject);
begin
Work:=False;
end;
 
constructor TNewThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;
 
procedure TNewThread.Execute;
var CurAcc:integer;
    HTTP: TIdHTTP;
    result, param:string;
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
 
     HTTP:=TIdHTTP.create(nil); //Создаём HTTP
     HTTP.HandleRedirects:=false; //Запрещаем редирект
 
     if Pos(';', Accounts[CurAcc])>0 then
     begin
      FAcc:= Copy(Accounts[CurAcc],1,Pos(';',Accounts[CurAcc])-1); //Копируем логин
      FPas:= Copy(Accounts[CurAcc],Pos(';',Accounts[CurAcc])+1,Length(Accounts[CurAcc])); //Копируем пароль
     end
     else if Pos(':', Accounts[CurAcc])>0 then
     begin
      FAcc:= Copy(Accounts[CurAcc],1,Pos(':',Accounts[CurAcc])-1); //Копируем логин
      FPas:= Copy(Accounts[CurAcc],Pos(':',Accounts[CurAcc])+1,Length(Accounts[CurAcc])); //Копируем пароль
     end
     else if Pos('|', Accounts[CurAcc])>0 then
     begin
      FAcc:= Copy(Accounts[CurAcc],1,Pos('|', Accounts[CurAcc])-1); //Копируем логин
      FPas:= Copy(Accounts[CurAcc],Pos('|',Accounts[CurAcc])+1,Length(Accounts[CurAcc])); //Копируем пароль
     end;
     try
      result:=HTTP.GET('http://androided.hostoi.com/bd.php?mail='+FAcc+'&pass='+FPas);
      json:=SO(result);
      if json.S['PUBLIC']='PUBLIC' then Rez:=-1
      else if json.S['PRIVATE']='PRIVATE' then Rez:=1;
     except
      Rez:=-1;
     end;
     HTTP.Free; //УБиваем HTTP
 
     Synchronize(Sync); //Делаем синхронизацию. Самая важная строка!
    end;
  end;
 
 dec(Thread);
 if Thread=0 then
 begin
 ShowMessage('OK'); //No comments...
 Form1.sButton2.Enabled:=True;
 Form1.sButton3.Enabled:=False;
 Form1.sButton1.Enabled:=True;
 Form1.sCheckBox1.Enabled:=True;
 end;
end;
 
procedure TNewThread.Sync;
begin
 case Rez of
   0:begin
      Accounts.Add(FAcc+';'+FPas);
     end;
   1:begin
      Append(PrivateFile);
      Writeln(PrivateFile,FAcc+';'+FPas);
      Closefile(PrivateFile);
      Form1.sLabel6.Caption:=IntToStr(StrToInt(Form1.slabel6.Caption)+1);
     end;
  -1:begin
      Append(PublicFile);
      Writeln(PublicFile,FAcc+';'+FPas);
      Closefile(PublicFile);
      Form1.slabel5.Caption:=IntToStr(StrToInt(Form1.slabel5.Caption)+1);
     end;
 end;
end;
 
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 work:=false;
 Accounts.Free;
 CS.Free;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 Accounts:=Tstringlist.create;
 CS:=TcriticalSection.create;
 login:='';
 apikey:='';
end;
 
end.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...