voila j'ai un peripherique que je controle par un controle activex
l'application est une fenetre MDI qui peut generer differentes actions
sur ce peripheriques.
Habituellement pour gerer les conflits de partage => semaphore
ici c'est differente car je veux que le dernier process appelant (une fenetre pour moi) prenne la main sur le periph et que l'autre recoit l'ordre de se retirer.
Je ne vais pas chercher a kicker le processus maitre ancien car s'il est en train de communiquer avec le controle activex ca pourrait le planter definitivement. Il est plus sage qu'il termine sa tache courante et qu'il perde la main dessus.
exemple :
periph *
processus 1 :
for (i=1 ; i < 100 ; i++)
periph->EmettreSon();
processus 2 :
for (i=1 ; i < 100 ; i++)
periph->EmettreSon();
L'utilisateur declenche process 1 => sons sortent
puis sur le 2
je veux
- que 2 attende la fin de l'appel a Emettre son de 1 (pour ne pas planter le controle activeX)
- que 1 perde la main sur le peripherique cad que soit Emettre son leve une erreur ou que le prochain appel a emetre son genere une erreur
- que 2 prenne la main
je veux eviter qu'au prochain appel de la boucle de 1, 1 reprenne la main comme 2 l'avait pris. Normalement ca serait plutot un probleme de semaphores ??? quoiqu'il est etrange je trouve ???
j'ai vraiment penser a faire des trucs etranges car pratiques
par exemple une fonction Priorite qui suivant le process appelant renvoit un pointeur sur le driver du peripherique ou sur un driver muet qui ne fait rien (le process 1 interogerait alors un driver vide qui ne fait que renvoyer des erreurs).
Partager