• 扩展 delphi 线程 使之传递参数.(给匿名线程增加参数)


    新delphi的线程TThread有了CreateAnonymousThread方法,如果再为它加一个可传递的参数不就更好了吗?代码如下:

    复制代码
      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;
    复制代码

    代码挺简单的,就是传递了一个方法及参数. 在线程里调用就是了.

    将以上代码保存在一个单元中,引用了之后,就可以这样用了:

    复制代码
    //这样使用
    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;
    复制代码

    如果执行线程的方法有两个,三个参数,对照着改就是了.

    这样用线程是不是更简单一些了呢.

    http://www.cnblogs.com/ttgss/p/3334723.html

  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
    记一次odoo创建新的模块时,但是在odoo web界面找不到应用的案例
    python实现格式化输出9*9乘法表
    format和urlencode的使用对比
    python字典小知识
    01
    深浅拷贝再回顾
    DRF的路由生成类的使用
  • 原文地址:https://www.cnblogs.com/findumars/p/6008642.html
Copyright © 2020-2023  润新知