Menu

QWorker add a new job based initialize and free support

As default,if you post a job to Workers object with a Data Pointer,you can assign a value to AFreeType parameter for tell the manager how to free the data.But sometime,the default implimention is not enough.So we add a JOB based initialize and free helper class named TQJobExtData.

Let us see the constructors:
constructor Create(AData: Pointer; AOnFree: TQExtFreeEvent); overload;
constructor Create(AOnInit: TQExtInitEvent;AOnFree: TQExtFreeEvent); overload;
constructor Create(const Value: Int64); overload;
constructor Create(const Value: Integer); overload;
constructor Create(const Value: Boolean); overload;
constructor Create(const Value: Double); overload;
constructor CreateAsDateTime(const Value: TDateTime); overload;
constructor Create(const S: QStringW); overload;
{$IFNDEF NEXTGEN}
constructor Create(const S: AnsiString); overload;
{$ENDIF}
{$IFDEF UNICODE}
constructor Create(AData: Pointer; AOnFree: TQExtFreeEventA); overload;
constructor Create(AOnInit: TQExtInitEventA;AOnFree: TQExtFreeEventA); overload;
{$ENDIF}

Let us see the properties:

property Origin: Pointer read FOrigin;
property AsString: QStringW read GetAsString write SetAsString;
property AsAnsiString: AnsiString read GetAsAnsiString write SetAsAnsiString;
property AsInteger: Integer read GetAsInteger write SetAsInteger;
property AsInt64: Int64 read GetAsInt64 write SetAsInt64;
property AsFloat: Double read GetAsDouble write SetAsDouble;
property AsBoolean: Boolean read GetAsBoolean write SetAsBoolean;
property AsDateTime: TDateTime read GetAsDateTime write SetAsDateTime;

Follow is the demo code in QWorkerDemo:

procedure TForm1.Button35Click(Sender: TObject);
var
AData: PComplexRecord;
begin
New(AData);
AData.Name:='Do you hat QDAC?';
Workers.Post(DoComplexJob, TQJobExtData.Create(AData, DoFreeComplexRecord), True,
jdfFreeAsObject);
Workers.Post(DoComplexJob, TQJobExtData.Create(DoCreateComplex,
DoFreeComplexRecord), True, jdfFreeAsObject);
Workers.Post(DoStringDataJob, TQJobExtData.Create('Hello,world of QDAC'), True,
jdfFreeAsObject);
{$IFDEF UNICODE}
New(AData);
AData.Name:='Do you like QDAC?';
Workers.Post(DoComplexJob, TQJobExtData.Create(AData,
procedure(AData: Pointer)
begin
Dispose(PComplexRecord(AData));
end), True, jdfFreeAsObject);
Workers.Post(DoComplexJob, TQJobExtData.Create(
procedure(var AData: Pointer)
var
S: PComplexRecord;
begin
New(S);
S.Name := 'Hello,I am too simple!';
S.Age := 11;
SetLength(S.Temp, 2);
AData := S;
end,
procedure(AData: Pointer)
begin
Dispose(PComplexRecord(AData));
end), True, jdfFreeAsObject);
{$ENDIF}
end;

Very easy!Just do it!

Posted by swish 2014-10-27 Labels: QWorker AutoFree

Log in to post a comment.