Delphi D10.X 并行库PPL编程之 Futures

Delphi D10.X 并行库PPL编程系列之 Futures

delphi中的RTL(运行库)提供了并行编程库(PPL --Parallel Programming Library) ,让您的应用程序可以在跨平台应用中有效的使用多个CPU并行运行任务的能力。
Futures 让流程专注于其他任务,然后在所需的位置获得该流程的结果。IFuture允许您为运行的代码块建立优先级,并在需要时仍返回结果。

Futures 说明

Future接受一个能够在并行线程中运行的函数,并返回一个接口,该接口用于在程序中所需位置获取结果。

Future方法将IFuture的实例返回到类型T定义的变量中。类型参数T表示要在并行线程中运行的函数的返回类型。

以下是不同的重载方法:

class function Future<T>(Sender: TObject; Event: TFunctionEvent<T>): IFuture<T>; overload; static; inline;
class function Future<T>(Sender: TObject; Event: TFunctionEvent<T>; APool: TThreadPool): IFuture<T>; overload; static; inline;
class function Future<T>(const Func: TFunc<T>): IFuture<T>; overload; static; inline;
class function Future<T>(const Func: TFunc<T>; APool: TThreadPool): IFuture<T>; overload; static; inline;

Futures演示

使用Futures时,将会在需要时获得此值,如果尚未计算,它将阻塞直到完成。

演示中使用到的控件

在这里插入图片描述
只需要两个按钮控件,其中一个用于启动计算,另一个用于获取计算执行结果。

添加使用单元

首先,我们需要引用PPL库:

uses
  System.Threading; // 需要引用PPL库

设置一个变量

  public
    { Public declarations }
    FutureString: IFuture<string>;

分别为两个按钮增加处理事件

{=======================  Future 演示  ========================================}
procedure TForm5.Button4Click(Sender: TObject);
begin
  FutureString:= TTask.Future<string>(
    function:string
    begin
      {暂停一段时间,模拟需要计算的处理时间 }
      Sleep(3000);
      Result:='Hello ' + Random(42).ToString;
  end);
end;

procedure TForm5.Button5Click(Sender: TObject);
begin
  Button5.Text := FutureString.Value;
end;
{=======================  Future 演示  ========================================}

演示效果

在这里插入图片描述
点击启动按钮后,在3秒内点击获取结果后,会阻塞直到我们程序里的3秒结束后,返回一个42以内的随机数。

具体使用请参阅

使用并行编程库
并行库PPL编程之 TTask
并行库PPL编程之 TParallel.For

演示Demo

可下载本系列文章对应的演示程序,含代码。使用D10.3.2编辑。
Delphi D10.X 使用并行编程库使用演示


欢迎光顾本人小店:(https://shop63778938.taobao.com/)
小店也提供delphi方面其他技术支持、定制开发。

现在就进店看看

以上信息对您有用的话请点赞收藏,就下面这行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值