Utilisation de TTask.lFuture de la bibliothèque de programmation parallèle
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 :
- Appelez TTask.Future<T> pour créer un objet future. La fonction spécifiée commence son exécution en arrière-plan.
- 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;