Все пытаюсь разобраться с многопоточностью, вот пример кода, в 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.
Как только ставлю вместо 2-х потоков 3 и более, программа просто виснет и ничего не происходит, в чем проблема, подскажите?