procedure Priorite02 is
TempsDebut : Time := Clock;
TskAffiche : T_TskAffiche;
type T_Priorité is (Urgente, Normale,
Basse);
task TskControleur is
entry Requete (T_Priorité)
(Message : in String);
end TskControleur;
task body TskControleur is
begin -- TskControleur
loop
select
accept Requete (Urgente) (Message : in String) do
TskAffiche.JAffiche (Estampiller (TempsDebut) & " : " &
Image (Requete'Caller) &
" servie : " & Message);
delay 2.0;
end Requete;
or
when Requete (Urgente)'Count = 0 =>
accept Requete (Normale) (Message : in String) do
TskAffiche.JAffiche (Estampiller (TempsDebut) & " : " &
Image (Requete'Caller) &
" servie : " & Message);
delay 2.0;
end Requete;
or
when Requete (Urgente)'Count = 0 and
Requete (Normale)'Count = 0 =>
accept Requete (Basse) (Message : in String) do
TskAffiche.JAffiche (Estampiller (TempsDebut) & " : " &
Image (Requete'Caller) &
" servie : " & Message);
delay 2.0;
end Requete;
or
terminate;
end select;
end loop;
end TskControleur;
task type T_TskUrgent (NbreSecondes : Natural);
task body T_TskUrgent is
begin -- T_TskUrgent
delay NbreSecondes *
1.0;
TskControleur.Requete
(Urgente) ("vite, vite, vite");
end T_TskUrgent;
task type T_TskNormal (NbreSecondes : Natural);
task body T_TskNormal is
begin -- T_TskNormal
delay NbreSecondes *
1.0;
TskControleur.Requete
(Normale) ("vite, vite");
end T_TskNormal;
task type T_TskBasse (NbreSecondes : Natural);
task body T_TskBasse is
begin -- T_TskBasse
delay NbreSecondes *
1.0;
TskControleur.Requete
(Basse) ("vite");
end T_TskBasse;
TskBasse1 : T_TskBasse (1);
TskBasse2 : T_TskBasse (1);
TskNormal1 : T_TskNormal (2);
TskUrgent1 : T_TskUrgent (2);
TskUrgent2 : T_TskUrgent (6);
begin -- Priorite02
null;
end Priorite02;