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

 

image-20240809-081138.png