le 04-12-2016 03:18 PM
1abvi3w ...
Quel est le but de ton code par rapport au fait de placer directement le code cible dans la structure case de la boucle productrice ?
Est-ce le fait de pouvoir générer "une nouvelle demande" alors que le code cible n'a pas encore fini son exécution ?
Si "oui" ... tu peux arriver au même résultat avec une seule boucle.
Mais peut-être n'ai-je pas compris le but recherché (par ton code) ... peux-tu m'expliquer ses avantages, merci.
le 04-12-2016 04:09 PM
Je ne connais pas son code original donc c'est difficile à dire.
J'essayais seulement de lui permettre d'avoir des sous-VI qui ne font q'attendre des événements de clavier "filtrés" et ne réagir qu'aux touches qui les intéressent.
Seulement avoir une boucle (VI principal) qui réagit à toutes les touches et qui fait un filtre, mon exemple est simpliste mais si le nombre de sous-VIs devient important, et que chacun d'eux s'intéresse à des touches particulières, la boucle principale pourra répartir à des UserEvents différentes pour chaque sous-VI...
Bref c'est une suggestion, le but n'est pas de créer des boucles, comme il mentionnait avoir des sous-VI, ce sont déjà des boucles.
le 04-12-2016 04:41 PM
Voici un peu ce que j'avais en tête.
04-12-2016 05:11 PM - modifié 04-12-2016 05:15 PM
@ 1abvi3w :
Sans discuter sur "le fond" de ton code ... pourquoi utilises-tu une Queue ?
(de plus c'est une Queue de 1 seul élément ... une Queue de 1 élément c'est "anti-queue" ça )
ci-dessous, ton code à l'identique, mais sans Queue ... et qui fonctionne aussi bien que le tien.
bon ... et tout simplement ceci ... cela ne pourrait-il pas aider ?
C'est tout simple ... ça filtre, et ça évite d'avoir une redondance du code cible si on appuie sur d'autres touches clavier pendant que la cible s'exécute.
(c'est juste "un principe" ... à compléter et/ou adapter. Ci-joint en LV2014)
PS: il ne faut pas travailler avec le "scan-code", mais avec la valeur "char".
Le "scan-code" c'est la position de la touche sur le clavier (!)
Il n'y a aucune certitude de portabilité en utilisant le "scan-code".
le 04-12-2016 05:49 PM
L'intérêt de la named queue c'est qu'on n'a pas à passer des fils entre les VIs. C'est une pratique courante en LabVIEW. Un seul élément est utile dans ce cas-ci puisqu'on a un array et ça garantie qu'il n'y aura pas d'éléments bidons dans la queue.
Encore une fois je me rabat sur l'objectif de Bastien de ne pas itérer ses boucles inutilement, il souhaite itérer seulement sur certaines touches... Ne connaissant pas son architecture je tente d'ouvrir les horizons pour qu'il puisse faire sa propre conception.
Je suis d'accord pour le char, je l'avais mentionné dans ma première réponse mais comme c'est un détail, je ne suis pas revenu là-dessus.
le 04-12-2016 06:41 PM
C'est une pratique courante en LabVIEW
oui, je connais si on désire passer des infos entre des VIs distincts, ok.
(je n'ai pas toujours en tête que l'on parle de VIs totalement distincts)
ne pas itérer ses boucles inutilement
oui (bof) je ne vois pas très bien le but de ne faire "tourner" sa boucle que (et uniquement) pour 1, 2 ou 3.
Si on filtre sur une structure case .. et que les autres cas arrivent sur un code vide ... je ne vois pas où est le soucis.
Mais bon ... je ne "discute pas" ... il a probablement ses raisons / contraintes.
De plus tous les codes jusqu'à présent n'évitent pas la redondance par appuis répétitifs (peut-être que ce cas de figure ne le gêne pas, je n'en sais rien)
Pour ce dernier point, perso j'aime bien le "flush event queue". (j'ai placé un exemple, il en fera ce qu'il veut)
au passage ... cela peut éventuellement intéresser certains,
pour bloquer et débloquer complètement le clavier ET la souris .. il y a une fonction de l'API Windows BlockInput
ça donne ceci :
attention, avec "255" en entrée, le clavier et la souris sont complètement OFF.
Le seul soucis de cette fonction, c'est qu'elle ne fonctionne qu'avec un "exe" ... en mode Administrateur.
Windows refuse l'accès avec un code d'erreur "Access Denied" si on est pas en mode Admin.
04-12-2016 07:53 PM - modifié 04-12-2016 08:10 PM
une chose que je n'aime pas trop dans ton code est le fait que tu créent 32.767 User-Event ... pour en fait n'en utiliser que 3.
J'ai testé une version utilisant uniquement 3 User-Event .. et le résultat était concluant.
Ensuite, je me suis dit ... pourquoi utiliser des User-Event multiples ? (Quel serait l'avantage de cette méthode ?)
J'ai donc câblé une version avec un User-Event unique ... et au prix d'une structure case supplémentaire, il me semble que cela fonctionne tout aussi bien.
Une raison au choix de ces User-Event multiples par rapport à un seul ?
C'est possible ... tu as peut-être une raison / arguments à ce type d'approche.
Comprendre les raisons qui t'ont porté à cette façon de faire m'intéresse.
04-12-2016 08:15 PM - modifié 04-12-2016 08:17 PM
donc ta boucle du haut fonctionne pour un seul VI esclave. Mon point était d'avoir une boucle principale qui ne dépend pas du nombre de VIs qui s'abonneront à certains caractères.
La boucle principale n'a pas besoin d'être codée spécialement pour certains groupes de caractères, les sous-VI décident eux mêmes quels caractères les intéressent.
Encore une fois, tout dépend du monsieur qui a posé la question initiale, il voulait désactiver certaines touches du clavier et avait plusieurs sous-VIs, je ne comprend pas trop sa question donc ça devient embêtant d'élaborer.
le 04-12-2016 10:14 PM
Mon point était d'avoir une boucle principale qui ne dépend pas du nombre de VIs qui s'abonneront à certains caractères.
La boucle principale n'a pas besoin d'être codée spécialement pour certains groupes de caractères, les sous-VI décident eux mêmes quels caractères les intéressent.
ça, c'est typique de quelqu'un qui développe en équipe, qui voit "global", qui voit "réutilisable".
C'est une approche que je n'ai pas (développant seul) ... je vois un besoin, j'y apporte une solution, sans pour autant penser "outil polyvalent".
Les 32.767 User-event me gênent ... je veux dire par là que c'est une vision "globale" qui "coûte cher".
Venant de l'assembleur, je n'ai pas (du tout) l'habitude d'utiliser des ressources si je n'en ai pas absolument besoin.
Cependant, au delà de toutes ces considérations, j'aime beaucoup l'idée ... kudo.
le 04-13-2016 02:09 AM