请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

吾爱极客

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1051|回复: 0

使用并行编程库中的TTask.IFuture

[复制链接]

271

主题

271

帖子

1129

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1129
发表于 2015-11-5 23:59:46 | 显示全部楼层 |阅读模式
IFuture 实现了TTask来创建一个返回指定类型的函数。使用IFuture 实例,你可以在计算一些东西或做一些查询的同时进行其它任务,在需要时获取数值。在这里,如果数值还没有完成,会一直阻塞等到数值计算好。这样允许你按想要的运行次序来优化代码,同时依然保证在需要的时间点获取数值。.


Delphi:
首先,定义 IFuture<T>实例。在这里我们用它来存储一个字符串。

  public
    { Public declarations }
    FutureString: IFuture<string>;
作为匿名函数传递给TTask.Future<T>的实现代码:
FutureString:= TTask.Future<string>(
function:string
  begin
   {Some calculation that takes time}
    Sleep(3000);
    Result:='Hello ' + Random(42).ToString;
  end);


你可以通过调用IFuture.Value获得计算值:


MyString
:= FutureString.Value;
C++:
首先,定义 IFuture<T>实例。在这里我们用它来存储一个字符串。还需要定义实现 TTask.Future<T> 句柄方法的方法:

public:                // User declarations
        System::DelphiInterface<IFuture__1<System::String> > FutureString;
        System::String __fastcall FutureHandler(TObject* Sender);

TTask.Future<T> 句柄方法实现和方法调用:

System::String __fastcall TForm1::FutureHandler(TObject* Sender){
  // Some calculation that takes time
  Sleep(3000);
  return System::String str = System::String().sprintf(L"Hello %d", Random(42));
}
FutureString = TTask::Future<System::String>(0, this->FutureHandler);
你可以通过调用IFuture.Value获得计算值:
MyString = FutureString->Value;



www.52jike.com (吾爱极客)  ruanzhuo翻译整理,转载请注明出处


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|吾爱极客 ( 粤ICP备15067754号-1  

GMT+8, 2018-11-21 16:56 , Processed in 0.141820 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表