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;

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

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

  • 相关阅读:
    sklearn 的 metrics
    转载:spring boot 中使用 jpa以及jpa介绍
    springboot 事件监听(@EventListener实现)
    多线程:创建线程和线程的常用方法
    缓存穿透、缓存击穿、缓存雪崩区别和解决方案
    不定义新变量,交换两个变量的值
    理解WebSocket心跳及重连机制
    SpringBoot实现WebSocket
    批量打包成ZIP压缩文件
    RocketMQ入门教程
  • 原文地址:https://www.cnblogs.com/ttgss/p/3334723.html
Copyright © 2011-2022 走看看