Delphi 线程传参

本文讨论了线程传参的必要性,包括传递数据、避免数据共享、提高灵活性和简化通信,以及通过TThread类的实例化和TProc的使用来实现。以数据库获取数据为例,展示了如何将数据作为参数传递给线程执行特定任务。
摘要由CSDN通过智能技术生成

线程传参的目的:


1. 传递数据给线程: 通过传参,线程可以获取在创建时传入的数据,这样线程就可以使用这些数据执行特定的操作。
2. 避免数据共享问题: 传递参数可以避免线程之间的数据共享问题,确保线程操作的数据是独立的,减少竞争条件和线程安全问题的发生。
3. 提高灵活性: 通过传递参数,可以让线程执行不同的任务或操作,提高代码的灵活性和复用性。
4. 简化线程通信: 通过传参,可以简化线程之间的通信过程,使线程之间的数据交换更加清晰和有序。
5. 安全性: 传递参数可以确保线程在正确的时机和地点获取到需要的数据,减少错误和混乱的可能性。

如何实现:

  TThread<T> = class(TThread) //用于线程传参
  private
    Fproc: TProc<T>;
    Avalue: T; //类型
  protected
    procedure Execute; override;
  public
    constructor create(const Aproc: Tproc<T>; pChar: T);
  end;

  TRecordData = ^PRecordData;

  PRecordData = record
    sName,SNum: string; 
    iMath, iChinese: Integer;
  end;

//实现

constructor TThread<T>.create(const Aproc: Tproc<T>; pChar: T);
begin
  inherited create(true);
  FreeOnTerminate := True;
  Fproc := Aproc;
  Avalue := pChar;
end;

procedure TThread<T>.Execute;
begin
  inherited;
  Fproc(Avalue);
end;

//调用

var

myGrade:PRecordData;

begin

打个比方: 数据库获取数据,注意这里只是举例子

qry.first;

while(not qry.eof) do 

begin

 myGrade.sName :=qry.filedByname('sName');

myGrade.sNum :=qry.filedByname('sNum');

myGrade.iMath :=qry.filedByname('Math');

myGrade.iChinese :=qry.filedByname('chinese');

              TDrawThread<PRecordData>.create(
                    procedure(myGrade: PRecordData)
                    begin     

                      end, myGrade).Start;

qry.next;

end;

end;

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值