Utilisation de TTask.lFuture de la bibliothèque de programmation parallèle

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation de la bibliothèque de programmation parallèle


Les objets future sont des objets implémentant l'interface IFuture, qui définit un mécanisme d'accès asynchrone au résultat d'une fonction.

Pour créer et utiliser un objet future :

  1. Appelez TTask.Future<T> pour créer un objet future. La fonction spécifiée commence son exécution en arrière-plan.
  2. Lisez la propriété Value de l'objet future object à tout moment pour obtenir le résultat de la fonction spécifiée. Si l'exécution de la fonction en arrière-plan n'est pas déjà terminée, Value bloque l'exécution du programme jusqu'à la terminaison de la fonction.

Par exemple :

Delphi :

FutureObject := TTask.Future<Integer>(function: Integer
    begin
        Sleep(3000);
        Result := 16;
    end);
// …
MyValue := FutureObject.Value;

C++ :

Si vous utilisez un compilateur C++ amélioré par Clang, vous pouvez utiliser des expressions lambda:

auto FutureObject = TTask::Future<int>([&]()-> int {
    Sleep(3000);
    return 16;
});
// …
int MyValue = FutureObject->Value;

Pour les compilateurs C++, vous pouvez déclarer une sous-classe TProc et en utiliser une instance transtypée en _di_TProc :

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;

Voir aussi