Bonjour les gens,
j'ai une appli qui vérifie toutes les n millisecondes un signal binaire, en interne pas de problème, une variable et c'est fini. Mais si c'est un programme exterieur qui gère ce signal. Une création/destruction de fichier suffit ? Une lecture/écriture dans le fichier ? C'est lent un disque ... Un socket spécial métaphore pipe fifo lifo reverse en mémoire ?
Un exemple :)
Le programme AAA, en python, vérifie toutes les 40 ms si le signal est 1 ou 0.
Le programme BBB, en C, tourne en fond et passe le signal à 1 quand il y a un son reçu par un micro, à 0 quand le son s'arrète.
Le programme CCC, en Ocaml, tourne aussi en fond et passe le signal à 1 quand la souris bouge, à 0 quand elle s'arrète.
BBB et CCC passe quoi à 0 et 1 (fichier créé ou pas, valeur dans un fichier, etc.)
AAA scrute quoi ?
PS : ça ne tourne que sous GNU/Linux et normalement il n'y a qu'une "source" de signal :)
# IPC
Posté par TheBreton . Évalué à 4.
un man kill (qui porte mal son nom) te mettras sur la voie, ou un petit google sur les linux ipc.
[^] # Re: IPC
Posté par rangzen (site web personnel) . Évalué à 3.
J'aimerai éviter une couche "communication directe".
C'est pour ça que je pensais passer par un fichier mais je trouve ça un peu "sale" et lent.
[^] # Re: IPC
Posté par TheBreton . Évalué à 2.
Sous linux tu as un acces au fichiers qui s'apelle "select " ou pselect qui place le processus appelant en sommeil (conso mini de cpu car oté du scheduler) jusqu'as que le fichier change d'etat
changer d'etat veut dire que la date du fichier a changé, qu'un nouvelle ecriture a eut lieu (nouvelle donné dispo) et tout ca.
Donc c'est propre (charge cpu reguler par la disponibilité des data ou non) et n'est pas trop lent (ton appli est placé en tete du scheduler parce qu'il t'as mis en sommeil explicitement).
[^] # Re: IPC
Posté par rangzen (site web personnel) . Évalué à 2.
[^] # Re: IPC
Posté par jemore . Évalué à 1.
[^] # Re: IPC
Posté par gc (site web personnel) . Évalué à 2.
[^] # Re: IPC
Posté par rangzen (site web personnel) . Évalué à 2.
En fait, c'est peut être pas mal avec deux handler sur
10) SIGUSR1
12) SIGUSR2
Sur 10, le signal est à 0
Sur 12, le signal est à 1
Ou alors juste une inversion de la valeur sur reception de 10
Hehe merci les gens !
# les fifo, c'est bo
Posté par gc (site web personnel) . Évalué à 4.
A "FIFO" is a special file type that permits independent processes to communicate. One process opens the FIFO file for writing, and another for reading, after which data can flow as with the usual anonymous pipe in shells or elsewhere.
# typo
Posté par gaaaaaAab . Évalué à 3.
# machintructitre
Posté par pasBill pasGates . Évalué à 2.
En passant, ton soft m'a l'air legerement bugge.
Si BBB passe a 1, le son continue et en meme temps CCC passe le signal a 0 car la souris s'est arretee, ton soft qui se reveille toutes les 40ms verra rien du tout.
D'ou l'interet d'utiliser un systeme d'events plutot qu'un polling, et surtout d'utiliser 2 signaux differents pour 2 evenements differents plutot que faire un truc avec 1 seule variable mais qui marche pas...
[^] # Re: machintructitre
Posté par rangzen (site web personnel) . Évalué à 2.
Quand j'utilise le clavier comme source, j'utilise KeyUp et KeyDown, je regardes pas toutes les x ms à quoi ressemble le clavier.
Je vois pas trop comment metre en place un sémaphore qui sera mlodifié par un programme exterieur. Mais t'es sur que c'est un sémaphore qui est utilisé pour ça ? Pour moi, les semaphores sont utilisés pour faire des compteurs de ressources ...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.