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);