|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Многопоточность в программах
Здравствуйте. Не знаю в какой раздел написать, поэтому пишу в этот!
Хочу узнать больше о потоках в делфи, а именно как сделать не один поток к основному, а несколько? Читал статьи про потоки, но в каждой из них описано как создать один дополнительный поток к основному! Кому не тяжело объяснить, прошу показать на примере! Допустим нужно создать программу которая в 100 потоков будет считать до 1 миллиарда с шагом в 0.001! Как реализовать это в 100 потоков? Ну или пример вашей программы, которая что-то делает в многопоточном режиме! Последний раз редактировалось MoS, 19.04.2013 в 10:54. |
#2
|
||||
|
||||
На винграде целый талмуд был по потокам, поищи там.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
||||
|
||||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMyThread = class(TThread) protected procedure Execute; override; end; TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TMyThread } procedure TMyThread.Execute; begin // do it end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i:=1 to 100 do TMyThread.Create(False); end; end. Пишу программы за еду. __________________ |
#4
|
||||
|
||||
Цитата:
Но есть еще вопрос, если в Execute есть: Код:
for k:=1 to 1000 do begin link:='http://www.-----.ru/page/'+IntToStr(i)+'/'; data:=Form1.IdHTTP1.Get(link); end; |
#5
|
||||
|
||||
В конструктор можно передать строку
Код:
for i := 0 to ... do foo := TMyThread.Create('blabla'+inttostr(i)); — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
MoS (19.04.2013)
|
#6
|
||||
|
||||
и IdHTTP1 объяви в Execute
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
MoS (19.04.2013)
|
#7
|
||||
|
||||
Все пытаюсь разобраться с многопоточностью, вот пример кода, в 2 потока работает, только такое ощущение что в 1 поток (не основной) все работает намного быстрее!
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Potok = class(TThread) private h: Extended; public protected procedure Execute; override; procedure ShowResult; end; var Form1: TForm1; pot: Potok; implementation {$R *.dfm} { Potok } procedure Potok.Execute; begin inherited; h:=0; while (h<>1000000000) do begin h:=h+0.001; Synchronize(ShowResult); end; end; procedure Potok.ShowResult; begin Form1.Label3.Caption:=FloatToStr(h); end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i:=1 to 2 do begin pot:=Potok.Create(false); pot.Priority:=tpNormal; pot.FreeOnTerminate:=true; end; end; procedure TForm1.Button2Click(Sender: TObject); var i: Integer; begin for i:=1 to 2 do pot.Suspend; end; end. |
#8
|
||||
|
||||
Немного оффтоп:
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось lmikle, 20.04.2013 в 02:50. |
#9
|
||||
|
||||
Цитата:
|
#10
|
||||
|
||||
А в том, что ты 2 раза записываешь в одну переменную разные значения. Вопрос на засыпку: куда девается первое?
А потом ты пытаешься два раза один и тот же поток остановить. Вопрос: почему? jmp $ ; Happy End! The Cake Is A Lie. |
#11
|
||||
|
||||
Цитата:
Приведите пожалуйста пример кода, вернее исправление моей программы! |
#12
|
||||
|
||||
Сделать массив из потоков, и присваивать в pot[i]. Соответственно, останавливать тоже pot[i]. А на будущее - отказаться от названий классов и переменных в транслитерации. А то будет
Код:
chbayta chetyrebayta := chbayta(_4bayta1); jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 19.04.2013 в 23:58. |
#13
|
||||
|
||||
Цитата:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Potok = class(TThread) private h: Extended; public protected procedure Execute; override; procedure ShowResult; end; var Form1: TForm1; pot: array[1..10] of Potok; implementation {$R *.dfm} { Potok } procedure Potok.Execute; begin inherited; h:=0; while (h<>1000000000) do begin h:=h+0.001; Synchronize(ShowResult); end; end; procedure Potok.ShowResult; begin Form1.Label3.Caption:=FloatToStr(h); end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i:=1 to 2 do begin pot[i]:=Potok.Create(false); pot[i].Priority:=tpNormal; pot[i].FreeOnTerminate:=true; end; end; procedure TForm1.Button2Click(Sender: TObject); var i: Integer; begin for i:=1 to 2 do pot[i].Suspend; end; end. Цитата:
|
#14
|
||||
|
||||
Цитата:
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. |
#15
|
||||
|
||||
Ну как дети, чес-слово. ТС поставь перед синхронайз паузу в 50-100 мс (миллисекунд) и будет тебе щастье (кста, наверное с большой буквы Щ)
ЗЫЖ видимо у тебя двухядерный проц Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |