Technique développement intertâche
Le dialogue intertâche ne fonctionne que dans un seul sens. Il y a toujours un maître du dialogue
Un programme écrit un message et un programme lit les message APRES qu’il se soit réveillé par une simulation de touche ( seul ce réveil permet d’aller lire le message, si on lit sans réveil on peut être amené a lire des message qui ne me sont pas destiné )
Si on veux faire un dialogue bidirectionel, IL FAUT faire des message inter tache, chacun sur son ‘canal’ ou ‘service’
Exemple :
Programme A écrit sur un canal a
Programme B ( le programme B s’abone au canal et attend le message )
Le 1er call peut être initié via des ping pour amorcer les identifications
Tant que le Programme B, n'a pas répondu, le Programme A attend un message de retour qui viendra par un inter tâche auquel le programme A s’abonne et écoute le programme B
Une fois ce message reçu, il peut à nouveau envoyer un message a B qui se fera réveillé.
La suite c’est A attend B jusqu’à que B écrit ou B attend jusqu’à que A écrit, par des réveils réciproques
Les instructions Diva associées:
InterTacheSetName permet de s’abonner à un service
InterTacheExistService vérifie si un service existe
LCInterTacheWriteMsg permet d’écrire un message sur un service
InterTacheReadMsg permet de lire un message sur un service
L’erreur la plus courante et d’appeler les deux canaux ou service du même nom
Par exemple, nous on créer un canal avec un nom unique
Exemple de l’explorateur de pièces
'27175890_IT_AdminPce' est envoyé par le gtpppce_exp au gtpppce000 via un ping, le gtpppce000 apres un ping s’abonne a ce canal avec InterTacheSetName avec '27175890_IT_AdminPce'
Ensuite le gtpppce_exp vérifie que le gtpppce000 est bien a l’écoute en appelant InterTacheExistService et LCInterTacheExistService
Si c’est ok, gtpppce_exp se met a l’écoute du gtpppce000 via InterTacheSetName avec ‘'27175890_IT_ExpPiece’
A ce moment :
Si le gtpppceexp veux écrire au gtpppce000 il utilise le canal '27175890_IT_AdminPce’
Si le gtpppce000 veux écrire au gtpppceexp il utilise le canal '27175890_IT_ ExpPiece’
Un exemple simple de programmation est fourni dans les exemples