[]-为什么这个简单多线程代码,执行后CPU好高,而且根本没有多线程的效果

[求助]--------为什么这个简单多线程代码,执行后CPU好高,而且根本没有多线程的效果?
本帖最后由 cowboamo 于 2012-12-06 22:04:59 编辑

高人帮看看,小弟刚学多线程,程序,就是要让线程和ProgressBar1里的进度同步,
问题如下:
1.但为什么一运行程序,系统都动不了了,要等运行完了才能动?
2.为什么?有时候出现程序执行完了,但进度条确在70%左右完了,或者是程序没完,进度条完了?


如何改,请问

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls;

  {声明多线程}
  type 
  TMyThread2 = class(TThread)
  private   
           ps1:TProgressBar;
  public 
    procedure    calt;   
    constructor Create(parent:TProgressBar); 
    procedure   Execute;override;   
  end; 
  
type
  TForm2 = class(TForm)
    ProgressBar1: TProgressBar;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
    L=10000;
var
  Form2: TForm2;

implementation

{$R *.dfm}
constructor    TMyThread2.Create(parent:TProgressBar);   
begin   
   ps1    :=    parent;   
   inherited    Create(false);   
end;   
   

procedure  TMyThread2.calt; 
var
  i:Integer;
begin

  //FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}          
  ps1.Max := L;
  for i := 1 to L do
  begin
    ps1.StepBy(1);
  end;
  
end;

procedure TMyThread2.Execute;
begin
    synchronize(calt);   
    if    Terminated    then    Exit;   
end;


procedure TForm2.FormCreate(Sender: TObject);
begin
    TMyThread2.Create(ProgressBar1);  //调用
end;

end.

------解决方案--------------------
需要延时吧。。10000格一下就跑完了
------解决方案--------------------
{ TMyThread2 }

procedure TMyThread2.calt;
begin
  ps1.StepBy(1);
end;

constructor TMyThread2.Create(parent: TProgressBar);
begin
  ps1 := parent;
  inherited Create(False);
end;

procedure TMyThread2.Execute;
begin
  ps1.Max := L;
  for i := 1 to ps1.Max do
  begin
    if Terminated then
      Break;
    synchronize(calt);
  end;
end;

------解决方案--------------------