扩展 delphi 线程 使之传递参数.
2013-09-23 13:55
323 查看
新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;
如果执行线程的方法有两个,三个参数,对照着改就是了.
这样用线程是不是更简单一些了呢.
相关文章推荐
- 扩展 delphi 线程 使之传递参数.(给匿名线程增加参数)
- Delphi 进程之间传递cmd参数
- Qt学习:线程间共享数据(使用信号槽传递数据,必须提前使用qRegisterMetaType来注册参数的类型)
- C#往线程里传递参数
- Delphi与汇编笔记(3)------关于参数的传递
- C#向线程传递参数和获得返回值
- C#多线程参数传递.cs
- C# 线程中使用Timer,并向其触发的事件(函数)中传递参数
- pthread_create函数的详细讲解(包括向线程函数传递参数详解)
- 多线程:如何在调用线程时传递参数总结
- Runnable接口定义线程的参数的传递方法.
- Handler类、异步线程和Message类的参数传递
- Delphi多线程及消息发送传递结构体参数
- AJAX扩展-POST传递参数并跳转页面
- C#给线程传递参数有3种方式
- Delphi 参数传递
- (VC/MFC)通过结构体传递参数给线程
- c#给线程传递参数的方法
- pthread_create函数的详细讲解(包括向线程函数传递参数详解)
- Delphi利用jni向java程序中传递参数