写了个多线程实例,主要代码如下:
TMyThread1 = class(TMyThread)
      protected
        procedure Execute;override;
        procedure SetPb;
      private
        i_ca:Integer;
     end;
procedure TMyThread1.Execute;
begin
    Synchronize(SetPb);
end;
procedure TMyThread1.SetPb;
var
  i:Integer;
  i_cata:Integer;
begin
  i_cata:=i_ca;
  if i_cata=1 then
  begin
  Form1.pb1.Min:=0;
  Form1.pb1.Max:=10000;
  Form1.pb1.Position:=0;
  for i:=0 to 10000 do
  begin
    Form1.pb1.StepBy(1);
  end;
  end else
  begin
     Form1.pb2.Min:=0;
  Form1.pb2.Max:=10000;
  Form1.pb2.Position:=0;
  for i:=0 to 10000 do
  begin
    Form1.pb2.StepBy(1);
  end;
  end;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
  m1:     TMyThread1;
    m2:      TMyThread1;
begin
 m1:=TMyThread1.Create(True);
 m1.i_ca:=1;
 m1.FreeOnTerminate := True;
 m1.Resume();  m2:=TMyThread1.Create(True);
  m2.FreeOnTerminate := True;
  m2.i_ca:=2;
  m2.Resume();
end;
想要实现的功能是点击按钮,两个主窗口的进度条同时跑,可我得到结果是一个一个依次运行的,为什么?多线程Delphi

解决方案 »

  1.   

    代码只有线程1
    procedure TMyThread1.Execute; 
    begin    
    Synchronize(SetPb); 
    end; 
    这里用了同步,可能是这个原因
      

  2.   

    这个简单 我个人呢比较懒 给你贴个地址吧 人家大牛弄的 举一反三哦
    http://www.cnblogs.com/del/archive/2009/02/11/1388700.html
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, SPComm, StdCtrls, ComCtrls;type
      TForm1 = class(TForm)
        btn1: TButton;
        pb1: TProgressBar;
        pb2: TProgressBar;
        procedure btn1Click(Sender: TObject);
     
      private
        { Private declarations }
      public
        { Public declarations }  end;var
      Form1: TForm1;implementation{$R *.dfm}
    type
          TMyThread1 = class(TMyThread)
          protected
        procedure Execute;override;
           procedure SetPb;
           private
             i_ca:Integer;
         end;procedure TMyThread1.Execute;
    begin
        Synchronize(SetPb);
    end;
    procedure TForm1.btn1Click(Sender: TObject);
    var
      m1:     TMyThread1;
        m2:      TMyThread1;
    begin
     m1:=TMyThread1.Create(True);
     m1.i_ca:=1;
     m1.FreeOnTerminate := True;
     m1.Resume();  m2:=TMyThread1.Create(True);
      m2.FreeOnTerminate := True;
      m2.i_ca:=2;
      m2.Resume();
    end;procedure TMyThread1.SetPb;
    var
      i:Integer;
      i_cata:Integer;
    begin
      i_cata:=i_ca;
      if i_cata=1 then
      begin
      Form1.pb1.Min:=0;
      Form1.pb1.Max:=10000;
      Form1.pb1.Position:=0;
      for i:=0 to 10000 do
      begin
        Form1.pb1.StepBy(1);
      end; 
      end else
      begin
         Form1.pb2.Min:=0;
         Form1.pb2.Max:=10000;
         Form1.pb2.Position:=0;
         for i:=0 to 10000 do
         begin
            Form1.pb2.StepBy(1);
         end;
      end;
    end;
      

  4.   

    现在解决了,是自己对Synchronize没搞懂,谢谢各位了,结帖了。