Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Многопоточность.


Автор: aSt0rm 19.2.2012, 19:46
Здравствуйте.помогите кодом пожалуйста.Есть такой вот "Проверятель e-mail" :

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  list:TStringList;
  mail,password:string;
  i:integer;
begin
  list:=TStringList.Create;
  list.LoadFromFile(opendialog1.filename);
  list.NameValueSeparator:=';';
for i:=0 to list.Count-1 do
begin
  mail:=list.Names[i];
  password:=list.ValueFromIndex[i];
try
  pop.Host:='pop.mail.ru';
  pop.Port:=110;
  pop.Username:=mail;
  pop.Password:=password;
  pop.Connect;
if pop.Connected then memo2.lines.Add(list.Names[i]);
except
 on E: Exception do
begin
  memo3.lines.Add(list.Names[i]);
end;
end;
  pop.Disconnect;
end;
end;
 

С потоками практически не знаком.
скажите/покажите как сделать программу многопоточной.Например:
Сейчас программа последовательно(от одного к другому) проверяет каждый e-mail.Это очень Долго.
Хочу что бы паралельно она проверяла другие e-mail.Так будет,я думаю,гораздо быстрее.

Автор: DJPhoeniX 19.2.2012, 19:54
Основной (управляющий) код создаёт массив из N потоков (наследников TThread, по их написанию в сети тыщи примеров). На каждом круге основного цикла (по логинам-паролям) проверяем результат работы потоков, пробегаясь по массиву. Если ни один из потоков не закончил работу - засыпаем ненадолго, и опять обходим массив. Если результат известен, и поток завершил работу - записываем результат куда надо, и перезапускаем освободившийся поток с новыми данными. Если входные данные закончились - дожидаемся завершения работающих потоков, освобождаем память и завершаемся.

Автор: ZBugz 20.2.2012, 06:33
http://forum.vingrad.ru/forum/topic-346507/kw-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B8.html

Автор: aSt0rm 20.2.2012, 12:18
Помогите кодом.Желательно с комментариями.
В google нашёл множество примеров по потокам.
нашёл как их создавать,"мастером" и "вручную",но,может быть у меня версия Delphi 7 глюченая,то ли руки кривые,не работают потоки smile 
при объявлении класса ругается.

user posted image

как понял из перевода,хочет видеть ":" заменяю "=" на ":" delphi твердит :

user posted image

Автор: Чучмек 20.2.2012, 13:17
Ты end у TForm удалил

Должно быть:
Код

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TNew=class(TThread)
  procedure Execute;override;
  end;

а не 
Код

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }


  TNew=class(TThread)
  procedure Execute;override;
  end;

и не
Код

type
  TForm1 = class(TForm)
  TNew=class(TThread)
  private
    { Private declarations }
  public
    { Public declarations }
  
  procedure Execute;override;
  end;

Почитай про классы сначала. 

Автор: MrDmitry 20.2.2012, 17:25
ЧучмекЯ конечно не спорю, но он вроде создал поток мастером, зачем ему там TForm? По моему ему просто надо удалить 
Код

Form1: TForm1;

Автор: aSt0rm 20.2.2012, 17:54
Головоломка! Трудно разобраться.
Если не сложно.Напишите код,реализацию многопоточности в моей программе,либо теории DJPhoeniX'а.
P.S. если нужно для этого запостить в другой раздел скажите.

Автор: MetalFan 20.2.2012, 18:04
Цитата(aSt0rm @  20.2.2012,  17:54 Найти цитируемый пост)
Напишите код,реализацию многопоточности в моей программе

это уже в раздел "работа" имхо. если ТС не хочет сам разбираться, то найдутся люди, которые все напишут, но за мат. вознаграждение.

Автор: Чучмек 20.2.2012, 18:14
Цитата(MrDmitry @  20.2.2012,  17:25 Найти цитируемый пост)
ЧучмекЯ конечно не спорю, но он вроде создал поток мастером, зачем ему там TForm? По моему ему просто надо удалить 

user posted image

Автор: MrDmitry 20.2.2012, 21:14
А ну да сорри, что то не обратил внимание ( 

aSt0rm

http://forum.vingrad.ru/forum/topic-60076.html - Вот хорошая статья с этого форума, первое время конечно было тоже не все понятно, но главное чтоб было желание и тогда думаю разберешься. 

Автор: Akella 22.2.2012, 13:44
aSt0rm, а чего такие маленькие картинки? Давай побольше!

Добавлено через 1 минуту и 44 секунды
aSt0rm, читай внимательно:
http://forum.vingrad.ru/forum/topic-126445.html
http://forum.vingrad.ru/forum/topic-237714.html

Автор: aSt0rm 25.2.2012, 21:03
Akella, извините, не не понимаю киньте пример для не большого разбора. 

Автор: aSt0rm 6.3.2012, 08:34
ап))актуально для меня. smile 

Автор: Чучмек 6.3.2012, 10:58
Вот для начала
Код

type
tmythr=class(tthread)
 procedure execute; override;
 procedure myproc;
 end;

procedure tmythr.execute;
begin
 while not terminated do
  begin
  Synchronize(myproc);
  sleep(100);
  end;
end;

procedure tmythr.myproc;
begin
form1.caption:=inttostr(random(255));
end;

var mt:tmythr;

begin
mt:=tmythr.Create(false);

end.

Автор: MetalFan 6.3.2012, 18:01
Цитата(Чучмек @  6.3.2012,  10:58 Найти цитируемый пост)
Вот для начала

Суровый пример)

Автор: Canyon 11.3.2012, 23:16
Не стал создавать тему, так как есть уже такая.
Читал статьи и смотрел видео имеено про многопоточность.
Со статей ничего не понял, так как смотрел на готовых примерах и там по другому описано и работает гораздо лучше.
Видео смотрел и читал и смотрел исходник про многопоточность >2, и столько не поняток осталось.

 smile  У меня к Вам огромная просьба. 
Могли бы ли Вы создать у себя проект пустой и сделай там многопоточность
Откоментить те строки где мы увеличиваем кол-во потоков и откоментить куда писать код. 

В моей программе должно быть  от 5 до 10 потоков. 99% Что синхронизацией я пользоваться не буду, так как она там не нужна.

И еще. Что если поток не уничтожить что произойдет? Вот я просто вышел из программы и не уничтожил его.

Автор: bems 12.3.2012, 03:26

M
bems
Один топик — один вопрос!

Пожалуйста, ознакомьтесь с правилами форума.




Тема закрыта. Создайте по одной теме для каждого интересующего вас вопроса.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)