Contenu principal

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

Mettre à jour l'interface utilisateur de manière asynchrone à l'aide de afterEach et afterAll

Cet exemple montre comment mettre à jour une interface utilisateur lorsque les calculs sont terminés. Lorsque vous déchargez les calculs sur les workers à l'aide de parfeval, toutes les interfaces utilisateur restent réactives pendant que les workers effectuent les calculs. Vous pouvez utiliser waitbar pour créer une interface utilisateur simple.

  • Utilisez afterEach pour mettre à jour l'interface utilisateur une fois chaque calcul terminé.

  • Utilisez afterAll pour mettre à jour l'interface utilisateur une fois tous les calculs terminés.

Utilisez waitbar pour créer un handle de figure, h . Lorsque vous utilisez afterEach ou afterAll, la fonction waitbar met à jour le handle de figure. Pour plus d'informations sur les objets handle, voir Handle Object Behavior .

h = waitbar(0,'Waiting...');

Utilisez parfeval pour calculer la partie réelle des valeurs propres de matrices aléatoires. Avec les préférences par défaut, parfeval crée automatiquement un pool parallèle si aucun n'a déjà été créé. Pour plus d'efficacité, préallouez un tableau d'objets Future.

f(1:100) = parallel.FevalFuture;
for idx = 1:100
    f(idx) = parfeval(@(n) real(eig(randn(n))),1,5e2); 
end

Vous pouvez utiliser afterEach pour appeler automatiquement des fonctions sur chacun des résultats des calculs parfeval. Utilisez afterEach pour planifier un autre ensemble d'objets futurs afin de calculer la plus grande valeur dans chacun des tableaux de sortie après la fin de chaque futur dans f.

maxFuture = afterEach(f,@max,1);

Vous pouvez utiliser la propriété State pour obtenir le statut des contrats à terme. Définissez une fonction anonyme qui met à jour la longueur fractionnaire de la barre d'attente de h à la fraction des objets Future qui ont terminé leur exécution. La fonction anonyme updateWaitbar calcule la moyenne d'un tableau logique dans lequel un élément est true si la propriété State de l'objet Future correspondant dans f est "finished".

updateWaitbar = @(~) waitbar(mean({f.State} == "finished"),h);

Utilisez afterEach et updateWaitbar pour mettre à jour la longueur de la barre d'attente fractionnaire après la fin de chaque futur dans maxFuture. Utilisez afterAll et delete pour fermer la barre d'attente une fois tous les calculs terminés.

updateWaitbarFutures = afterEach(f,updateWaitbar,0);
afterAll(updateWaitbarFutures,@(~) delete(h),0)

Utilisez afterAll et histogram pour afficher un histogramme des résultats dans maxFuture une fois tous les futurs terminés.

showsHistogramFuture = afterAll(maxFuture,@histogram,0);

Voir aussi