源代码:(只有一个源文件)
unit Main;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls;type
  TForm1 = class(TForm)
    SSI: TImage;
    QSI: TImage;
    BSI: TImage;
    Exit: TBitBtn;
    Start: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure ExitClick(Sender: TObject);
    procedure StartClick(Sender: TObject);
    procedure PrintImages(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;  //选择排序线程
  SSThread=class(TThread)
  protected
   procedure Execute;override;
   procedure SSort(var A: array of Integer);
  private
   arrnum:array[1..200]of integer;
  end;  //冒泡排序线程
  BSThread=class(TThread)
  protected
   procedure Execute;override;
   procedure  BSort(var A: array of Integer);
  private
   arrnum:array[1..200]of integer;
  end;  //快速排序线程
  QSThread=class(TThread)
  protected
   procedure Execute;override;
   procedure  QSort(var A: array of Integer; iLo, iHi: Integer);
  private
   arrnum:array[1..200]of integer;
  end;var
  Form1: TForm1;
  SS:SSThread;
  BS:BSThread;
  QS:QSThread;implementation{$R *.dfm}
///////////************类中方法**************//////////////////////////
procedure SSThread.SSort(var A: array of Integer); //var A: array of Integer
var
  I, J, T: Integer;
begin
  for I := Low(A) to High(A) - 1 do
    for J := High(A) downto I + 1 do
      if A[I] > A[J] then
      begin
        T := A[I];
        A[I] := A[J];
        A[J] := T;
        if Terminated then begin
                            Form1.PrintImages(Form1);
                            exit;
                           end;
      end;
end;procedure SSThread.Execute;
begin
 SSort(arrnum);
end;
///////////************类中方法**************//////////////////////////procedure BSThread.BSort(var A: array of Integer); //var A: array of Integer
var
  I, J, T: Integer;
begin
  for I := High(A) downto Low(A) do
    for J := Low(A) to High(A) - 1 do
      if A[J] > A[J + 1] then
      begin
        T := A[J];
        A[J] := A[J + 1];
        A[J + 1] := T;
        if Terminated then begin
                            Form1.PrintImages(Form1);
                            exit;
                           end;
      end;
end;procedure BSThread.Execute;
begin
 BSort(arrnum);
end;///////////************类中方法**************//////////////////////////
procedure QSThread.QSort(var A: array of Integer; iLo, iHi: Integer);//var A: array of Integer; iLo, iHi: Integer
var
    Lo, Hi, Mid, T: Integer;
begin
    Lo := iLo;
    Hi := iHi;
    Mid := A[(Lo + Hi) div 2];
    repeat
      while A[Lo] < Mid do Inc(Lo);
      while A[Hi] > Mid do Dec(Hi);
      if Lo <= Hi then
      begin
        T := A[Lo];
        A[Lo] := A[Hi];
        A[Hi] := T;
        Inc(Lo);
        Dec(Hi);
      end;
     if Terminated then begin
                            Form1.PrintImages(Form1);
                            exit;
                           end;
    until Lo > Hi;
    if Hi > iLo then QSort(A, iLo, Hi);
    if Lo < iHi then QSort(A, Lo, iHi);
  end;procedure QSThread.Execute;
begin
 QSort(arrnum,1,200);
end;
///////////************类中方法**************//////////////////////////procedure TForm1.FormCreate(Sender: TObject);
var
k,t:integer;
begin
   SS:=SSThread.Create(true);
   BS:=BSTHread.Create(true);
   QS:=QSThread.Create(true);
   for k:=1 to 200 do
   begin
   t:=random(200);
   SS.arrnum[k]:=t;
   BS.arrnum[k]:=t;
   QS.arrnum[k]:=t;
   end;
   PrintImages(Form1);
end;procedure TForm1.ExitClick(Sender: TObject);
begin
application.terminate;
end;
/////////////////***********开始并发排序************/////////////////////
procedure TForm1.StartClick(Sender: TObject);
begin
  SS.Resume;
  BS.Resume;
  QS.Resume;
end;
/////////////////***********完成并发排序************/////////////////////
procedure TForm1.PrintImages(Sender: TObject);
var
k:integer;
pt:array[1..3,1..200,1..2] of Tpoint;
begin
  SSI.Picture.Assign(nil);
  BSI.Picture.Assign(nil);
  QSI.Picture.Assign(nil);
    for k:=1 to 200 do
     begin
      pt[1,k,1].X:=0;
      pt[1,k,2].X:=SS.arrnum[k];
      pt[1,k,1].Y:=2*k-1;
      pt[1,k,2].Y:=pt[1,k,1].Y;
      pt[2,k,1].X:=0;
      pt[2,k,2].X:=BS.arrnum[k];
      pt[2,k,1].Y:=2*k-1;
      pt[2,k,2].Y:=pt[2,k,1].Y;
      pt[3,k,1].X:=0;
      pt[3,k,2].X:=QS.arrnum[k];
      pt[3,k,1].Y:=2*k-1;
      pt[3,k,2].Y:=pt[3,k,1].Y;
     end;
   for k:=1 to 200 do
     begin
      SSI.Canvas.Polyline(pt[1,k]);
      BSI.Canvas.Polyline(pt[2,k]);
      QSI.Canvas.Polyline(pt[3,k]);
     end;
end;end.
运行后,点击排序,但是一点反应也没有.