---------------------------------
-- D. Mathieu                  --
--                             --
-- fichier Essai12.adb         --
--                             --
-- créé le 26/12/98            --
--                             --
---------------------------------
-- Programme illustrant les dépendances des tâches filles
--
-- Le programme provoque l'édition suivante :

-- 3.004000000 : t_tsk_02460130     : Fin de la tache fille
-- 3.004000000 : t_tsk_02462F00     : Fin de la tache fille
-- 3.004000000 : main_task_02454988 : Reprise de la tache cadre
-- 3.004000000 : main_task_02454988 : Reprise de la tache cadre
-- 6.008000000 : t_tsk_02465CF0     : Fin de la tache fille
-- 6.008000000 : t_tsk_02462958     : Fin de la tache fille
-- 6.008000000 : t_tsk_02465728     : Fin de la tache fille
--
-- Comme on le constate, la tâche cadre ne reprend que lorsque les
-- deux tâches filles du premier bloc sont terminées, qu'elles
-- soient activées dans la déclaration ou dans le corps du bloc.
-- En revanche, la tâche cadre reprend aussitôt après le second
-- bloc alors que trois tâches filles ont été élaborées et activées
-- dans la déclaration ou le corps du second bloc.
-- Cet exemple montre que la tâche cadre correspond A LA PORTEE DU TYPE
-- POINTEUR et non à celle des pointeurs eux-mêmes ou du type tâche.

with Calendar, Ada.Text_IO, P_Tsk_BAO;
use  Calendar, Ada.Text_IO, P_Tsk_BAO;

procedure Essai12 is

    TempsDebut : Time;
    TskAffiche : T_TskAffiche;
    task type T_Tsk;
    task body T_Tsk is
    begin
        delay 3.0;
        TskAffiche.JAffiche  (Estampiller (TempsDebut) & " : " &
                              S_Identifier &
                              "     : Fin de la tache fille");
    end T_Tsk;
    type T_PtrTsk is access T_Tsk;
    PtrGlobal1,
    PtrGlobal2 : T_PtrTsk;
 
begin -- Essai12

    TempsDebut := Clock;

    declare
        type T_PtrTskLocal is access T_Tsk;
        PtrLocal1 : T_PtrTskLocal := new T_Tsk;
        PtrLocal2 : T_PtrTskLocal;
    begin
        PtrLocal2 := new T_Tsk;
    end;
    TskAffiche.JAffiche (Estampiller (TempsDebut) & " : " &
                         S_Identifier &
                         " : Reprise de la tache cadre");
    declare
        PtrLocal1 : T_PtrTsk := new T_Tsk;
        PtrLocal2 : T_PtrTsk;
    begin
        PtrGlobal1 := new T_Tsk;
        PtrLocal2  := new T_Tsk;
    end;
    TskAffiche.JAffiche (Estampiller (TempsDebut) & " : " &
                         S_Identifier &
                         " : Reprise de la tache cadre");
end Essai12;