Utilisation de TTask.lFuture de la bibliothèque de programmation parallèle
Remonter à Utilisation de la bibliothèque de programmation parallèle
IFuture implémente TTask pour lancer une fonction qui renvoie un type spécifique. Les instances de IFuture sont renvoyées par TTask.Future<T>, où le paramètre de type, T, représente le type de renvoi. En utilisant une instance de IFuture, vous pouvez calculer quelque chose ou exécuter une requête et en même temps faire d'autres tâches. Vous obtenez le résultat (la valeur) au moment de votre choix via IFuture.Value. A ce moment-là, si le calcul de la valeur n'est pas terminé, l'attente de ce calcul est bloquée. Cela vous permet de définir la priorité d'exécution des blocs de code, puis d'obtenir la valeur au moment où vous en avez besoin.
Delphi :
Au préalable, déclarez votre instance de IFuture<T>. Dans cet extrait de code, nous l'utilisons pour stocker une chaîne.
public
{ Public declarations }
FutureString: IFuture<string>;
L'implémentation transmise en tant que méthode anonyme à TTask.Future<T> :
FutureString:= TTask.Future<string>(
function:string
begin
{Some calculation that takes time}
Sleep(3000);
Result:='Hello ' + Random(42).ToString;
end);
Vous pouvez obtenir la valeur calculée en appelant IFuture.Value :
MyString := FutureString.Value;
Au préalable, déclarez votre instance de IFuture<T>. Dans cet extrait de code, nous l'utilisons pour stocker une chaîne. Vous devez également déclarer la méthode qui contient l'implémentation de la méthode gestionnaire TTask.Future<T>.
public: // User declarations
System::DelphiInterface<IFuture__1<System::String> > FutureString;
System::String __fastcall FutureHandler(TObject* Sender);
L'implémentation de la méthode gestionnaire TTask.Future<T> et l'appel à cette méthode :
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);
Vous pouvez obtenir la valeur calculée en appelant IFuture.Value :
MyString = FutureString->Value;