Verwenden von TTask.IFuture aus der Parallel Programming Library
Nach oben zu Verwenden der Parallel Programming Library
Future-Objekte sind Objekte, die die IFuture-Schnittstelle implementieren, die einen Mechanismus definiert, um auf das Ergebnis einer Funktion asynchron zuzugreifen.
Um ein Future-Objekt zu erstellen und zu verwenden:
- Rufen Sie TTask.Future<T> auf, um ein Future-Objekt zu erstellen. Die angegebene Funktion beginnt die Ausführung im Hintergrund.
- Lesen Sie die Value-Eigenschaft des Future-Objekts zu jeder Zeit, um das Ergebnis die angegebenen Funktion abzurufen. Wenn die Funktionsausführung im Hintergrund noch nicht beendet wurde, blockiert
Valuedie Programmausführung, bis die Funktion beendet ist.
Zum Beispiel:
Delphi:
FutureObject := TTask.Future<Integer>(function: Integer
begin
Sleep(3000);
Result := 16;
end);
// …
MyValue := FutureObject.Value;
C++:
Wenn Sie einen durch Calng basierten C++-Compiler verwenden, können Sie Lambda-Ausdrücke verwenden:
auto FutureObject = TTask::Future<int>([&]()-> int {
Sleep(3000);
return 16;
});
// …
int MyValue = FutureObject->Value;
Sie können für jeden C++-Compiler eine TProc-Unterklasse deklarieren, und seine Instanz, die als _di_TProc umgewandelt wird, verwenden:
class TCppTask : public TCppInterfacedObject<TFunc<int> > {
public:
int __fastcall Invoke() {
Sleep(3000);
return 16;
}
};
// …
System::DelphiInterface<IFuture__1<int> > FutureObject = TTask::Future<int>(new TCppTask());
// …
int MyValue = FutureObject->Value;