le 05-27-2012 06:16 PM
Je remarque une chose qui me semble curieuse (qu'en pensez-vous ?)
Quand on configure un Event_Case dans une Structure Event, ou peu activer (ou non)
le blocage du Front Panel pendant l'execution de cet Event_Case.
off/on : Lock front panel (defer processing od user actions) until this event case completes
Nous sommes bien d'accord que cette phrase dit que le Front Panel est verrouillé jusqu'a la fin du traitement de l'événement dont question.
en dessous, une image + fichier joint (pas de snippet car une variable locale).
Le bouton_A est capturé par l'event "bouton_A : value change" (option lock Front Panel: OFF)
Le bouton_A est placé "dans" l'event_A.
Le bouton_B est capturé par l'event "bouton_B : value change" (option lock Front Panel: ON)
Le bouton_B est placé "dans" l'event_B.
Pour l'événement du bouton_A : une tempo de 10sec, et j'allume une Led.
Pour l'événement du bouton_B : une temp de 50ms
Tout ceci normalement donne quoi (?) :
1) Run
2) un clic sur bouton_A : la Led s'allume (pendant 10sec)
3) un clic sur le bouton_B : on ne "voit" rien mais l'event "B" est réalisé, soit une tempo de 50ms
pendant ces 50ms le FP est bloqué ... ensuite le FP est à nouveau accessible.
Lock front panel until this event case completes ... donc ici, pendant 50ms
et bien pas du tout ...
Le Front panel reste bloqué, non pas pendant 50ms, mais pendant 10sec
Tant que l'événement A n'est pas terminé ... B ne se termine pas. (??)
Là ... Il y a un truc que je ne comprends PAS !
05-27-2012 06:32 PM - modifié 05-27-2012 06:36 PM
J'ai trouvé en partie ... mais il "reste" quelque chose de curieux.
Il faut attendre la fin de l'event_A pour que l'évent_B soit activé ... (normal)
Par conre, le lock du Front panel, lui, est activé dès que je touche le bouton_B ... alors que l'Event_B n'est "pas encore" en cours.
B doit attendre la fin de A (ça, c'est normal)
Mais le lock demandé du Front Panel ... lui ... est actif immédiatement.
Dès que B est sur la "Pile événements de la structure" ... l'événement attend, mais l'option Lock est réalisée de suite.
le 05-28-2012 02:51 PM
Intéressant. Je ne savais pas, je n’ai pas vérifié, mais je vais le faire demain.
A ta lecture, j’arrive à la même conclusion, il suffit qu’un évènement de type “Lock front panel until this event case completes” soit dans le buffer de la structure event pour bloquer l’IHM, même s’il ne s’exécute pas encore.
Et si j’ajoute par programmation un nouvel évènement dans le buffer de type « unlock » (je ne déverrouille pas l’IHM quand même, démontrer un bug).
A+
Luc Desruelle | Mon profil | Mon blog LabVIEW |
LabVIEW Architect (CLA) & TestStand Developper (CTD) | LabVIEW Champion
MESULOG | NERYS
le 05-28-2012 03:26 PM
Prends mon snippet Luc, il y a tout ce qu'il faut pour constater la chose.
clic sur A
et immédiatement après clic sur B
B sera activé "une fois", et ensuite tout est bloqué pendant 10 sec.
(si tu clic 2x sur B .... le bouton B "bougera" une fois tout de suite ... et une 2eme fois à la fin des 10sec)
le 05-28-2012 07:05 PM
"il suffit qu’un évènement de type “Lock front panel until this event case completes” soit dans le buffer
de la structure event pour bloquer l’IHM, même s’il ne s’exécute pas encore"
moi, je pense que l'info "Lock FP until ...." n'est pas mise dans le buffer ... elle est activée directement.
Si l'info était mise dans le buffer, elle "accompagnerait" l'Event auquel est associé
et serait activée en même temps que "son" Event, pas avant.
(Pour moi, "Lock FP until ..." n'est pas un Event en soi, c'est une propriété d'un Event.)
le 05-29-2012 01:22 AM
Ceci pourrait apporter un peu de lumière...
By default, when an event enters a queue, LabVIEW locks the front panel that contains the object that generated that event. LabVIEW keeps the front panel locked until all Event structures finish handling the event. While the front panel is locked, LabVIEW does not process front panel activity but places those interactions in a buffer and handles them when the front panel is unlocked.
Texte copié à partir d'ici.
le 05-29-2012 02:26 AM
JB a écrit :Ceci pourrait apporter un peu de lumière...
merci pour la lumière!
Luc Desruelle | Mon profil | Mon blog LabVIEW |
LabVIEW Architect (CLA) & TestStand Developper (CTD) | LabVIEW Champion
MESULOG | NERYS
le 05-29-2012 04:18 AM
le 05-29-2012 04:41 AM
C'est aussi pour sa qu'on dit toujours que le code dans une structure event doit s'exécuter "instantanément". D'une manière générale pour faire une action longue il faut gérer sa dans une autre boucle (consomatrice) ou dans un autre thread.
le 05-29-2012 04:47 AM
ah oui...
je pourrais gérer l'event de mon bouton "go" avec ma structure event ..
et ensuite simplement envoyer un Notifier ou une Occurrence vers une boucle extérieure.
bonne idée Rodéric, merci.