Показать сообщение отдельно
  #7  
Старый 19.04.2013, 20:35
Аватар для MoS
MoS MoS вне форума
Прохожий
 
Регистрация: 21.11.2012
Сообщения: 29
Версия Delphi: 7
Репутация: 10
По умолчанию

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