Einzelnen Beitrag anzeigen

CPO

Registriert seit: 14. Feb 2007
11 Beiträge
 
Delphi 7 Personal
 
#1

Problem: Bei Onterminate eine Variable mit übergeben

  Alt 18. Feb 2007, 12:57
Auszug aus dem Delphi-Thread-Demo:

Delphi-Quellcode:
type
  TThreadSortForm = class(TForm)
    StartBtn: TButton;
    BubbleSortBox: TPaintBox;
    SelectionSortBox: TPaintBox;
    QuickSortBox: TPaintBox;
    Label1: TLabel;
    Bevel1: TBevel;
    Bevel2: TBevel;
    Bevel3: TBevel;
    Label2: TLabel;
    Label3: TLabel;
    procedure BubbleSortBoxPaint(Sender: TObject);
    procedure SelectionSortBoxPaint(Sender: TObject);
    procedure QuickSortBoxPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure StartBtnClick(Sender: TObject);
  private
    ThreadsRunning: Integer;
    procedure RandomizeArrays;
    procedure ThreadDone(Sender: TObject);
  public
    procedure PaintArray(Box: TPaintBox; const A: array of Integer);
  end;
...

procedure TThreadSortForm.StartBtnClick(Sender: TObject);
begin
  RandomizeArrays;
  ThreadsRunning := 3;
  with TBubbleSort.Create(BubbleSortBox, BubbleSortArray) do
    OnTerminate := ThreadDone;
  with TSelectionSort.Create(SelectionSortBox, SelectionSortArray) do
    OnTerminate := ThreadDone;
  with TQuickSort.Create(QuickSortBox, QuickSortArray) do
    OnTerminate := ThreadDone;
  StartBtn.Enabled := False;
end;

procedure TThreadSortForm.ThreadDone(Sender: TObject);
begin
  Dec(ThreadsRunning);
  if ThreadsRunning = 0 then
  begin
    StartBtn.Enabled := True;
    ArraysRandom := False;
  end;
end;
Ich möchte der Procedure ThreadDone nun eine extra Variable (Numm) mit übergeben, welche unter private deklariert wird.

Delphi-Quellcode:
type
  TThreadSortForm = class(TForm)
    ...
  private
    ThreadsRunning: Integer;
    Numm:byte;
    procedure RandomizeArrays;
    procedure ThreadDone(Sender: TObject; Numm:byte);
  public
    procedure PaintArray(Box: TPaintBox; const A: array of Integer);
  end;
...

procedure TThreadSortForm.StartBtnClick(Sender: TObject);
begin
  RandomizeArrays;
  ThreadsRunning := 3;
  with TBubbleSort.Create(BubbleSortBox, BubbleSortArray) do
    OnTerminate := ThreadDone(??,10);
  with TSelectionSort.Create(SelectionSortBox, SelectionSortArray) do
    OnTerminate := ThreadDone(??,10);
  with TQuickSort.Create(QuickSortBox, QuickSortArray) do
    OnTerminate := ThreadDone(??,10);
  StartBtn.Enabled := False;
end;

procedure ThreadDone(Sender: TObject; Numm:byte);
begin
  Dec(ThreadsRunning);
  if ThreadsRunning = 0 then
  begin
    StartBtn.Enabled := True;
    ArraysRandom := False;
  end;

  If Numm=10 then .....
end;
Welches TObject muss da mit übergeben werden? - habe den Code nur in einer Unit.
Bei OnTerminate := ThreadDone; (Originalbeispiel) wird ja auch kein TObject mit übergeben.
  Mit Zitat antworten Zitat