le 11-04-2013 11:07 AM
Un d'entre vous aurait-il une critique / objection / conseil / commentaire
sur cette façon de stopper plusieurs While en //.
Les structures Event me permettent de temporiser ET de stopper chaque boucle
Existe-t-il une contre-indication quelconque à utiliser plusieurs binômes While_Event ayant un event en commun ?
(Je pense qu'il n'y a pas de problème, mais je n'en suis pas certain à 100%)
Résolu ! Accéder à la solution.
le 11-04-2013 11:32 AM
Salut Pierre
Et pourquoi pas comme ça ?
le 11-04-2013 11:55 AM
pardon j'ai oublié le vi qui vas bien avec...
11-04-2013 11:59 AM - modifié 11-04-2013 12:05 PM
et comme ceci ...
![]()
pas de vi pour moi (na)
.. "obtain notifier", "send notification" et "wait on Notification" (palette synchronisation)
11-04-2013 12:17 PM - modifié 11-04-2013 12:17 PM
Mauvais joueur !
il est pas plus simple mon exemple !
Sinon sympas je ne connaissais pas...
a+
le 11-04-2013 01:00 PM
ton code est bon ...
on le retrouve même sur une page de national Instruments ...
alors, si NI s'en sert dans un de ses exemples ... que dire de plus ? ![]()
il y a bien la variante "variables locales" ... mais certains aiment moins.
il y a une part de feeling et de "sensibilité" propre à chacun dans tout ça ![]()
le 11-04-2013 01:07 PM
mais ...
revenons à ma question de départ, car une éventuelle réponse m'intéresse :
Existe-t-il une contre-indication quelconque à utiliser plusieurs binômes While_Event ayant un event en commun ?
(voir image 1er message)
(Je pense qu'il n'y a pas de problème, mais je n'en suis pas certain à 100%)
11-04-2013 02:22 PM - modifié 11-04-2013 02:28 PM
Voici deux « observations» à l’utilisation de ce code.
1 .Si tu déclenches un événement qui prend un certain temps dans l’une des structures événement.
Il faudra alors que la structure ai finit son événement avant quel prenne en compte une action du bouton stop.
Il est à noter qu'elle enregistre « la demande d’événement stop en mémoire » même si elle est occupée à autre chose, elle l’exécutera cette demande dans un second temps…
2. Cette deuxième observation d'écoule de la première, l'exécution des événements se feront les un après les autres mais jamais simultanément.
le 11-04-2013 02:54 PM
Hello,
Chaque structure événement gère sa propre file d'attente d'événements, les boucles vont donc déclencher et s'exécuter en même temps dans leur thread respectif.
La raison pour laquelle on évite ce genre de code n'est pas l'aspect fonctionnel mais le caractère complexe et non-élégant. En plus, ce code ne fonctionnera pas pour les booléens en armement. De même d'ailleurs pour les variables locales et noeuds de propriété...Note, les noeuds de propriété sont beaucoup plus lents (quelques dizaines de fois plus lents) que les variables ou le flux de données
Bon, et sinon, comment on fait un joli code alors ?
Pas de réponse magique, cela dépend du code dans les boucles. Si on dispose de fonctions de synchronisation (file d'attente, notificateurs, sémaphores...), on peut gérer intelligemment le cluster d'erreur. La bonne vieille FGV est plus que recommandable la plupart du temps. Nos copines mal-aimées les occurrences. Que d'options 🙂
Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.
11-04-2013 04:33 PM - modifié 11-04-2013 04:41 PM
@Eric
Merci Eric pour ton intervention.
Une FGV pour stopper plusieurs Boucles ?
"set" dans la boucle "main" et "get" dans les boucles "slave" ... c'est ce à quoi tu penses ?
Tu me confirmes que, pour toi, c'est la meilleure solution ... disons ... passe partout,générique ?
N'aimes-tu pas la solution de la "notification" ? (pure)
Je ne parle pas du cas où l'on a déjà une notification dans le code ...
et où on se sert de la gestion d'erreur dans les "wait on notification" par absence de référence.
Je parle d'une vraie notification dédiée au stop.
Je n'aime pas trop ces façons basées sur la gestion de l'erreur ... un a priori, probablement.
Pour moi, la ligne d'erreur n'est pas "là" pour ça.
C'est une cabriolle qui fonctionne, mais cela reste pour moi une cabriolle.
Et stopper avec une Occurrence ? Pourquoi ne les aime-t-on pas ?
NI lui-même recommande de les utiliser le moins possibles ? pourquoi ? une fonction appelée à disparaître peut-être ?
"National Instruments encourages you to use the Notifier operations functions in place of occurrences for most operations"
Je n'aime pas trop non plus la solution du Noeud de Propriété, ni de la Variable Locale.
Pourquoi ? l'une comme l'autre brise le concept du flux de données.
Oui, je sais, "ça fonctionne" ... mais ça perturbe ma façon de penser.
Quant au système avec structure event, elle a 2 avantages :
on peut se passer d'un wait(ms) ... avec la notification aussi.
on peut interrompre la temporisation de la boucle. L'arrêt est immédiat.
Personnellement j'ai un petit faible pour la notification ... quoique ta "fgv" me fait réfléchir.
Pour une fgv, je n'ai pas cette impression de rupture de flux ... et pourtant, si on veut ergoter ...
Pour moi il n'y a pas de rupture de flux au "set" ... la rupture de flux se trouve au "get".
beaucoup de remarques/questions ... mais le sujet est sensible ![]()
Ton avis sur tout ceci m'intéresse bien évidemment.
Merci.