这是为什么?

解决方案 »

  1.   

    var
         i:integer;
    begin
         TProgress1.Create(ProgressBar2,0,100,0,1);
         TProgress1.Create(ProgressBar3,0,100,0,1);     for i:=0 to 99 do
         begin
              ProgressBar1.StepIt;
              sleep(10);     end;
    end;
    TProgress1是自建的线程类
      

  2.   

    TProgressThread = class(TThread)
         private
              FProgressBar: TProgressBar;
              F1,F2,F3,F4: integer;
              procedure DoMove;
         protected
              procedure Execute; override;
              procedure Move(A1,B1,C1,D1:integer); virtual; abstract;
         public
              constructor Create(Progress: TProgressBar; A,B,C,D: integer);
         end;     TProgress1 = class(TProgressThread)
         protected
              procedure Move(A1,B1,C1,D1:integer); override;
         end;
      

  3.   

    constructor原型
    constructor Create(CreateSuspended:Boolean)
    注:
    参数CreateSuspended为一个布尔型变量,如果设置为False,线程对象创建后立即调用TThread类的另一个过程Excute,也就是立即开始执行线程操作;如果设置为True,则线程对象创建后,要调用Resume后线程操作才开始。
    试一试吧!
      

  4.   

    是因为你的线程访问了vcl组建,需要一个其它的东西来同步才行,叫什么我忘了,你找一找关于线程同步的书籍就可以知道了。
      

  5.   

    是false;线程创建后,要等主线程的for 循环结束后才开始,为什么不和
    主线程同步呢?
      

  6.   

    unit Unit1;interfaceuses
      Classes, Graphics, ComCtrls, Windows;type     TProgressThread = class(TThread)
         private
              FProgressBar: TProgressBar;
              F1,F2,F3,F4: integer;
              procedure DoMove;
         protected
              procedure Execute; override;
              procedure Move(A1,B1,C1,D1:integer); virtual; abstract;
         public
              constructor Create(Progress: TProgressBar; A,B,C,D: integer);
         end;     TProgress1 = class(TProgressThread)
         protected
              procedure Move(A1,B1,C1,D1:integer); override;
         end;implementation{ TProgressThread }constructor TProgressThread.Create(Progress: TProgressBar; A, B, C,
      D: integer);
    begin
         FProgressBar:= Progress;
         F1:= A; F2:= B; F3:= C; F4:= D;
         FreeOnTerminate := True;
         inherited Create(false);
    end;procedure TProgressThread.DoMove;
    var
         i: integer;
    begin
         FProgressBar.Min:= F1;
         FProgressBar.Max:= F2;
         FProgressBar.Position:= F3;
         FProgressBar.Step:= F4;     for i:= 0 to FProgressBar.Max -1 do
         begin
              FProgressBar.StepIt;
              sleep(10);
         end;end;procedure TProgressThread.Execute;
    begin
         Move(1,1,1,1);end;{ TProgress1 }procedure TProgress1.Move(A1, B1, C1, D1: integer);
    begin
    //     Synchronize(DoMove);
         DoMove;
    end;end.
      

  7.   

    >>>新建了一个线程,create以后并不马上执行,得等到主程序线程结束后才行压根不行
    主线程结束后,在主线程生成的次线程会跟你结束你要启一个进程才行。。
    CreateProcess...