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;

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

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

  • 相关阅读:
    校验器
    Mybatis分页中遇到的坑3

    Lock1
    Validation(4)-临时
    在Java中如何判断对象已死?
    垃圾回收算法的种类
    Java内存区域
    Java 中的 volatile关键字含义
    分别写出堆内存溢出与栈内存溢出的程序?
  • 原文地址:https://www.cnblogs.com/ttgss/p/3334723.html
Copyright © 2011-2022 走看看