delphiスレッドを拡張してパラメータを伝達する.
4568 ワード
新しいdelphiのスレッドTThreadにはCreateAnonymousThreadメソッドがありますが、伝達可能なパラメータを追加すればもっといいのではないでしょうか.コードは次のとおりです.
コードはとても簡単で、1つの方法とパラメータを伝達しました.オンラインで呼び出せばいいです.
上記のコードを1つのユニットに保存し、参照した後、このように使用できます.
スレッドを実行する方法が2つ、3つのパラメータがあれば、対照的に変更すればよい.
このようにスレッドを使うのはもっと簡単ではないでしょうか.
TAnonymousThreadX<T> = class(TThread)
private
FProc: TProc<T>;
AValue:T;
protected
procedure Execute; override;
public
constructor Create(const AProc: TProc<T>;ProcPar:T);
end;
TThreadHelper= class helper for TThread
public
class function CreateAnonymousThreadX<T>(const ThreadProc: TProc<T>;proPar:T): TThread; static;
end;
implementation
{ TAnonymousThreadX }
constructor TAnonymousThreadX<T>.Create(const AProc: TProc<T>;ProcPar:T);
begin
inherited Create(True);
FreeOnTerminate := True;
FProc := AProc;
Avalue:=ProcPar;
end;
procedure TAnonymousThreadX<T>.Execute;
begin
inherited;
FProc(Avalue);
end;
{ TThreadHelper }
class function TThreadHelper.CreateAnonymousThreadX<T>(const ThreadProc: TProc<T>; proPar: T): TThread;
begin
Result := TAnonymousThreadX<T>.Create(ThreadProc,proPar);
end;
コードはとても簡単で、1つの方法とパラメータを伝達しました.オンラインで呼び出せばいいです.
上記のコードを1つのユニットに保存し、参照した後、このように使用できます.
//
TThread.CreateAnonymousThreadX<Integer>(TestX,1234).Start;
// TestX
procedure T***.TestX(Avalue: Integer);
begin
btnContinue.Caption:=IntToStr(Avalue);
end;
// TestX ,
TThread.CreateAnonymousThreadX<Integer>(
procedure(Avalue:Integer)
begin
btnContinue.Caption:=IntToStr(Avalue);
end
,12345).Start;
スレッドを実行する方法が2つ、3つのパラメータがあれば、対照的に変更すればよい.
このようにスレッドを使うのはもっと簡単ではないでしょうか.