Hi alzaimar,
ein sehr schöne Kapselung für WorkerThreads. Tolle Arbeit!
Das einzige, was ich vermisse, ist eine Eigenschaft aThread.Terminated innerhalb der Jobs. Gerade wenn man länger dauernde Jobs laufen läßt, könnte man hiermit Verzögerungen beim Beenden vermeiden.
Edit: Das wär auch sehr einfach zu lösen, da der TWorkerThread ja ein Nachkomme von TThread ist. Einfach das property einfügen und gut ist.
Delphi-Quellcode:
TWorkerThread =
Class(TThread)
private
fCurrentException:
Exception;
fCOMInitialized: Boolean;
fCurrentJob: TWorkerThreadJob;
fOnJobException: TJobExceptionEvent;
fJobList: TWorkerThreadJobList;
fID: Integer;
fOnJobNotify: TJobMessageEvent;
fJob: TWorkerThreadJob;
fMessage:
string;
{$IFDEF DebugUnit}
fOnAction: TMessageEvent;
fMsg:
String;
Procedure DoAction;
{$ENDIF}
Procedure Run;
Procedure DoOnException;
procedure DoNotify;
protected
Procedure Execute;
override;
public
Constructor Create(aID: Integer; aJobList: TWorkerThreadJobList);
Destructor Destroy;
override;
Procedure Notify (aJob : TWorkerThreadJob;
Const aMessage :
String);
Procedure Synchronize(Method: TThreadMethod);
Property ID: Integer
read fID;
Property OnJobNotify : TJobMessageEvent
read fOnJobNotify
Write fOnJobNotify;
{$IFDEF DebugUnit}
Property OnAction: TMessageEvent
read fOnAction
write fOnAction;
{$ENDIF}
Property OnJobException: TJobExceptionEvent
read fOnJobException
write fOnJobException;
Property Terminated;
// eingefügt
End;
Gruß Assertor