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

  1. TAnonymousThreadX<T> = class(TThread)
  2. private
  3. FProc: TProc<T>;
  4. AValue:T;
  5. protected
  6. procedure Execute; override;
  7. public
  8. constructor Create(const AProc: TProc<T>;ProcPar:T);
  9. end;
  10. TThreadHelper= class helper for TThread
  11. public
  12. class function CreateAnonymousThreadX<T>(const ThreadProc: TProc<T>;proPar:T): TThread; static;
  13. end;
  14.  
  15. implementation
  16.  
  17. { TAnonymousThreadX }
  18.  
  19. constructor TAnonymousThreadX<T>.Create(const AProc: TProc<T>;ProcPar:T);
  20. begin
  21. inherited Create(True);
  22. FreeOnTerminate := True;
  23. FProc := AProc;
  24. Avalue:=ProcPar;
  25. end;
  26.  
  27. procedure TAnonymousThreadX<T>.Execute;
  28. begin
  29. inherited;
  30. FProc(Avalue);
  31. end;
  32.  
  33. { TThreadHelper }
  34.  
  35. class function TThreadHelper.CreateAnonymousThreadX<T>(const ThreadProc: TProc<T>; proPar: T): TThread;
  36. begin
  37. Result := TAnonymousThreadX<T>.Create(ThreadProc,proPar);
  38. end;

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

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

  1. //这样使用
  2. TThread.CreateAnonymousThreadX<Integer>(TestX,).Start;
  3.  
  4. //这是TestX方法体
  5. procedure T***.TestX(Avalue: Integer);
  6. begin
  7. btnContinue.Caption:=IntToStr(Avalue);
  8. end;
  9.  
  10. //如果不想定义TestX方法,也可以如下方法直接调用
  11. TThread.CreateAnonymousThreadX<Integer>(
  12. procedure(Avalue:Integer)
  13. begin
  14. btnContinue.Caption:=IntToStr(Avalue);
  15. end
  16. ,).Start;

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

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

扩展 delphi 线程 使之传递参数.的更多相关文章

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

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

  2. Jmeter线程组间传递参数

    现在做测试和以前不太一样了,以前只要站在一个用户的角度做端到端的UI测试就可以了,现在不会做接口测试,出去都不好意思和别人打招呼.那提到接口测试,就不得不提一下接口测试利器Jmeter,大家也都知道, ...

  3. 【delphi】Delphi过程、函数传递参数的八种方式

    Delphi过程函数传递参数的八种方式

  4. jmeter线程组之间传递参数

    JMeter 变量作用域局限于所属线程.这样设计是经过深思熟虑的,目的是让测试线程能够独立运转.有时候用户可能需要在不同线程间(可能属于同一个线程组,也可能不属于同一个线程组)传递变量. 其中一种方法 ...

  5. Delphi线程简介---Create及其参数、Resume、Suspend

    TThread在Classes单元里的声明如下 type TThread = class private FHandle: THandle; FThreadID: THandle; FTerminat ...

  6. jmeter 发送加密请求 beanshell断言 线程组间传递参数

    原文地址https://www.cnblogs.com/wnfindbug/p/5817038.html 最近在做http加密接口,请求头的uid参数及body的请求json参数都经过加密再发送请求, ...

  7. jmeter解决不同线程组之间传递参数问题

    首先在第一个线程组里讲你需要保存的值放入到jmeter的某个属性中,属性名名字自己定义,如上图的token , props.put("token", token),第二个参数必须是 ...

  8. Net线程足迹 传递参数至线程

    方法一:应用ParameterizedThreadStart这个委托来传递输入参数,这种方法适用于传递单个参数的情况. using System; using System.Collections.G ...

  9. Jmeter 跨线程组传递参数 之两种方法

    终于搞定了Jmeter跨线程组之间传递参数,这样就不用每次发送请求B之前,都需要同时发送一下登录接口(因为同一个线程组下的请求是同时发送的),只需要发送一次登录请求,请求B直接用登录请求的参数即可,直 ...

随机推荐

  1. MD5Encoder加密支持utf-8

    import java.security.MessageDigest; public class MD5Encoder { public static String encode(String str ...

  2. 沈逸老师PHP魔鬼特训笔记(5)

    接上一节课,我们专门新建了一个godconfig类,设置了两个属性prj_name(项目名),prj_author(作者),然后我们获取标准输入(stdin)把结果保存在了类里面. 好吧,这节课的名字 ...

  3. nodejs 安装 postgresql module

    # npm -gd install node-gyp # export PATH=$PATH:/usr/local/pgsql/bin # npm -gd install pg for test: # ...

  4. iOS - UI - UIScrollView

    1.UIScrollView 滚动视图 // 滚动视图 UIScrollView* scrollView = [[UIScrollView alloc]initWithFrame:self.view. ...

  5. selenium修改控件属性

    起因:在进行退出的时候,控件属性显示为不可显示,于是在界面上是不可以点击的,如果想点击这个按钮,只能通过修改控件属性,进行点击 上图看控件,正常来说,点击坐边的用户名,下拉会出现一个logout,退出 ...

  6. javascript函数的声明和调用

    × 目录 [1]函数的声明方式 [2]函数的调用方式 [3]两种声明方式的区别 函数:将完成某一特定功能的代码集合起来,可以重复使用的代码块. ---------------------------- ...

  7. 基础面试题——Javascript

    1.介绍js的基本数据类型 Undefined.Null.Boolean.Number.String 2.js有哪些内置对象? 数据封装类对象:Object.Array.Boolean.Number ...

  8. C#_数组

     数组是相同数据类型的元素按一定顺序排列的集合,然后用一个变量名进行命名.新建控制台程序,声明一个静态方法 using System; using System.Collections.Gener ...

  9. Ajax 传统的异步登陆

    这是一个传统的异步登陆,利用Ajax实现的,主要代码如下: 客户端代码: var http; function Button1_onclick() { if (window.ActiveXObject ...

  10. ListViewDemo

    ListView Layout示例:MainActivity.java中定义待显示的数据countryArray, 在activity_main中定义ListView,activity_listvie ...