|
Вопрос # 4 105/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Пытаюсь создать 36 потоков для генерации всех возможных вариантов последовательности символов, записанных в Edit1. По 6 символов в каждой строке.
Почему-то параллельной генерации не получается, код работает как одним потоком. Помогите разобраться, я ламер!
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls,syncobjs;
-
- type
- TYourThread = class(TTHread)
-
- private
- a1:word;
- protected
- procedure Doit;
- procedure Execute; override;
- public
- constructor Create(CreateSuspennded: Boolean; aa1:word);
- end;
-
-
- TForm1 = class(TForm)
- Button1: TButton;
- txt: TMemo;
- Edit1: TEdit;
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
- tt:array[1..36] of TYourThread;
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.Button1Click(Sender: TObject);
- var
- a1:byte;
- begin
- for a1:=1 to 36 do begin
- tt[a1] := TYourThread.Create(True, a1);
- tt[a1].Resume;
-
- end;
- end;
-
- { TYourThread }
-
- constructor TYourThread.Create(CreateSuspennded: Boolean;
- aa1:word);
- begin
- inherited Create(CreateSuspennded);
- a1:=aa1;
-
- end;
-
- procedure TYourThread.Doit;
- var
- a2,a3,a4,a5,a6:byte;
- begin
- for a2:=1 to Length(Form1.edit1.Text)-1 do
- for a3:=1 to Length(Form1.edit1.Text)-1 do
- for a4:=1 to Length(Form1.edit1.Text)-1 do
- for a5:=1 to Length(Form1.edit1.Text)-1 do
- for a6:=1 to Length(Form1.edit1.Text)-1 do
- Form1.txt.Lines.Add(Form1.edit1.Text[self.a1]+Form1.edit1.Text[a2]+
- Form1.edit1.Text[a3]+Form1.edit1.Text[a4]+
- Form1.edit1.Text[a5]+Form1.edit1.Text[a6]+
- Form1.edit1.Text[a7]+Form1.edit1.Text[a8]) ;
-
- end;
-
- procedure TYourThread.Execute;
- begin
- Synchronize(doit);
- end;
-
- end.
 |
Вопрос задал: webkent (статус: 2-ой класс)
Вопрос отправлен: 30 апреля 2010, 00:37
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 29; последнее сообщение — 30 апреля 2010, 19:20; участников в обсуждении: 3.
Страницы: [« Предыдущая] [1] [2]
|
Вадим К (статус: Академик), 30 апреля 2010, 17:33 [#21]:
Я тоже не люблю сагу X-Y-Z. Но в данном случае задача была явна.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
webkent (статус: 2-ой класс), 30 апреля 2010, 17:38 [#22]:
у меня проц 4ядерный каждый по 2 потока, значит 8 можно?
|
|
min@y™ (статус: Доктор наук), 30 апреля 2010, 17:44 [#23]:
Тебе нужна супермегаскорость или просто результат получить?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
webkent (статус: 2-ой класс), 30 апреля 2010, 17:48 [#24]:
Результат нужен, но что бы быстрее его формировать, т.к. потом буду и для 7-и 8-ми-9-ти 10-ти символов генерировать и нужен самый быстрый способ.
|
|
Вадим К (статус: Академик), 30 апреля 2010, 17:59 [#25]:
процессор 4 ядра? значит 4 дополнительных потока. Я не писал, что можно по два на ядро.
Но тут проблема в другом месте сидит, и это место - memo. (или TStringList - не важно).
зайдем с другой стороны. пусть пароль 8 символов. 36 вариантов на каждое знакоместо. итого имеем
368 * (8+1) = 2.53899891671e+13 байт = 23Терабайта!
(умножаем на 8+1 -- 8 это кол-во символов в добавляемой строке, 1 - это на перевод строки, хотя может быть и 2.)
Это не вместиться в мемо на 32битной машине (там максимум 2 Гагабайта, если знать, как все затюнинговать, но на самом деле этого никто никогда не достигал, думаю максимум где то пол гига получиться).
О том, сколько будет генерироваться такой пароль, я предоставляю Вам
Галочка "подтверждения прочтения" - вселенское зло.
|
|
webkent (статус: 2-ой класс), 30 апреля 2010, 18:04 [#26]:
Блин, жаль =) А последняя строчка в тему =)
а по 2 потока на ядро я имел в виду у меня core i7 там вроде как по 2 потока на ядро. В taskmgr показано как 8.
|
|
min@y™ (статус: Доктор наук), 30 апреля 2010, 18:08 [#27]:
Самый быстрый способ - это ассемблер. И каждый пароль хранить нигде не надо, надо его тут же подставлять куда надо и проверять. Наглядный пример такого брутфорса - программа MD5Inside.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 30 апреля 2010, 18:22 [#28]:
Цитата (webkent):
там вроде как по 2 потока на ядро
не путайте. Все из за перевода. там потоки исполнения.
В целом, если код например просто выполняет сложения-вычитание в цикле, то можно получить из этого выгоду. Для этой задачи очень маловероятно. 4 треда - наиболее реально. Хотя, советую Вам ручками протестировать на небольших наборах и посмотреть на скорость. Думаю, реально будет прирост при двух потоках. А на 4 у Вас уже будет падение. На 8 будет ещё больше.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
webkent (статус: 2-ой класс), 30 апреля 2010, 19:20 [#29]:
Спасибо за советы, так и сделаю!
|
Страницы: [« Предыдущая] [1] [2]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|