zoukankan      html  css  js  c++  java
  • 扩展 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;

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

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

  • 相关阅读:
    HDU 2116 Has the sum exceeded
    HDU 1233 还是畅通工程
    HDU 1234 开门人和关门人
    HDU 1283 最简单的计算机
    HDU 2552 三足鼎立
    HDU 1202 The calculation of GPA
    HDU 1248 寒冰王座
    HDU 1863 畅通工程
    HDU 1879 继续畅通工程
    颜色对话框CColorDialog,字体对话框CFontDialog使用实例
  • 原文地址:https://www.cnblogs.com/ttgss/p/3334723.html
Copyright © 2011-2022 走看看