---------------------------------
-- D. Mathieu
--
--
--
-- fichier Essai07I.adb --
--
--
-- créé le 30/12/98
--
--
--
---------------------------------
--
-- Programme de test de l'identification d'une tâche
-- Ce programme provoque l'affichage suivant (par exemple) :
--
-- La tache coucou_0244D378 vous dit Coucou
-- La tache coucou_0244D378 vous dit Coucou
-- Je suis la tache cadre : main_task_024449B0
-- Ma tache fille est : coucou_0244D378
--
-- La tache coucou_0250160 vous dit Coucou
-- La tache coucou_0250160 vous dit Coucou
-- Je suis la tache cadre : main_task_024449B0
-- Ma tache fille est : coucou_0250160
--
-- Remarque :
-- 1) - noter l'utilisation des éléments
du paquetage
-- Ada.Tsk_Identification
: les fonctions Current_Task et
--
Image, le type Task_ID.
-- 2) - noter aussi l'accès à une tâche
par son identificateur.
-- 3) - une tâche ne peut connaître directement
que son propre
-- identificateur. Elle
ne peut commaître l'identificateur
-- d'une autre tâche
que si cette dernière le lui communique.
-- 4) - Autant que possible, les affichages sont effectuées
par un
-- seul appel à
la fonction Put_Line, par concaténation de chaînes,
-- plutôt que par
appels successifs à Put et Put_Line. Nous sommes
-- dans un contexte d'affichages
concurrents, et nous pouvons
-- espérer que
Put_Line est ATOMIQUE (il faudrait le vérifier).
--
with Ada.Text_Io;
use Ada.Text_Io;
with Ada.Task_Identification;
use Ada.Task_Identification;
procedure Essai07I is
task type T_TskCoucou is
entry WhoAreYou (MyNameIs
: out Task_ID);
end T_TskCoucou;
task body T_TskCoucou is
begin -- T_TskCoucou
for I in 1..2 loop
Put_Line (" La
tache " & Image (Current_Task)
& " vous dit Coucou");
delay 1.0;
end loop;
accept WhoAreYou (MyNameIs
: out Task_ID) do
Put_Line (" La
tache " & Image (WhoAreYou'Caller) & "m'appelle");
MyNameIs
:= Current_Task;
end WhoAreYou;
end T_TskCoucou;
begin -- Essai07I2
declare
Coucou : T_TskCoucou;
T
: Task_ID;
begin
Coucou.WhoAreYou (T);
Put_Line (" Je suis
la tache cadre : " & Image (Current_Task));
Put_Line (" Ma tache
fille est : " & Image (T));
end;
New_Line;
declare
Coucou : T_TskCoucou;
T
: Task_ID;
begin
Coucou.WhoAreYou (T);
Put_Line (" Je suis
la tache cadre : " & Image (Current_Task));
Put_Line (" Ma tache
fille est : " & Image (T));
end;
end Essai07I;