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翻译整理,转载请注明出处
|