Verwenden von TTask.IFuture aus der Parallel Programming Library

Aus RAD Studio
Wechseln zu: Navigation, Suche

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:

  1. Rufen Sie TTask.Future<T> auf, um ein Future-Objekt zu erstellen. Die angegebene Funktion beginnt die Ausführung im Hintergrund.
  2. 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 Value die 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;

Siehe auch