Einzelnen Beitrag anzeigen

endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#5

Re: Probleme mit Threads und Aufgaben-Pool

  Alt 17. Mai 2005, 21:55
vielen dank für deine geduld, ich hab dein beispiel nun wie folgt in
die main-unit eingebunden, könntest du dir vielleicht kurz anschauen
ob das alles so korrekt ist?

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms, StdCtrls, ComCtrls,
  Unit2, Dialogs, FastStrings, SyncObjs;

type
  TJob = String;
  TJobList = Class
  Private
    fList : TStringlist;
    fCS : TCriticalSection;
  Public
    Constructor Create;
    Destructor Destroy; Override;
    Procedure AddJob (aJob : TJob);
    Function GetNextJob : TJob;
    Function JobsAvailable : Boolean;
    End;

  TMainForm = class(TForm)
    btnStartThreads: TButton;
    ....
    end;
  public
    { Public-Deklarationen }
    pool: TJobList;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

Constructor TJobList.Create;
Begin
  fCS := TCriticalSection.Create;
  fList := TStringlist.Create;
End;

Destructor TJobList.Destroy;
Begin
  fCS.Free;
  fList.Free;
  inherited;
End;

Procedure TJobList.AddJob (aJob : TJob);
Begin
  fCS.Enter;
  Try
    fList.Add (aJob);
  Finally
    fCS.Leave;
    End
End;

Function TJobList.GetNextJob : TJob;
Begin
  fCS.Enter;
  Try
    Result := fList[0];
    fList.Delete (0);
  Finally
    fCS.Leave;
    End
End;

Function TJobList.JobsAvailable : Boolean;
Begin
  fCS.Enter;
  Try
    Result := (fList.Count > 0 );
  Finally
    fCS.Leave;
    End
End;

procedure TMainForm.btnStartThreadsClick(Sender: TObject);
....
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  Pool:= TJobList.Create;
  Pool.AddJob('test');
  Pool.AddJob('test2');
....
im thread rufe ich dann Job:= MainForm.Pool.GetNextJob; auf,
das klappt alles wunderbar, ich hoffe ich habe soweit alles
richtig eingebunden, GANZ großen dank für deine hilfe

mfg
  Mit Zitat antworten Zitat