partage de variable sans attente.
Bonjour,
Je souhaite partager entre plusieurs taches une variable qui est modifiée par une de ces taches sans qu'une de ces taches soit pénalisé par l'attente.
Description :
J'ai d'abord une tache Rackctrl dans mon paquetage Main qui interface la console.
Dans cette console, je souhaite, pouvoir entrée un caractère pour démarrer ou arrêter la tacche qui modifie la variable,ou arrêter la tache à tout moment, et surtout afficher la variable modifier par une l'tache.
Typiquement Rackctrl :
Code:
1 2 3 4 5 6 7 8 9 10
|
package Racklog.Main is
task Rackctrl is
entry Initialize;
entry Receive(Char : in Character);
entry Halt;
end Rackctrl;
end Racklog.Main; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
package body Racklog.Main is
task body Rackctrl is
End_Of_Task : Boolean := True;
begin
accept Initialize do
End_Of_Task := False;
end Initialize;
while not End_Of_Task loop
-- ici, je dois afficher la variable.
-- Si la tache qui modifie la variable est démarrée, je doit attendre la nouvelle valeur.
-- si non, j'attends pas.
select
accept Receive(Char : in Character);
or
accept Halt do
End_Of_Task := True;
end Halt;
exit;
end select;
end loop;
end Rackctrl;
end Racklog.Main; |
Au lieu des commentaires, j'écrirais bien pour une tache nommé Racksheduler :
Code:
1 2 3 4 5
|
Afficher(variable)
if Running then
Racksheduler.send(Ma_Variable);
end if; |
Mais je trouve pas ça très joli perso. N'y a t- il pas plus légé ?
Merci pour vos réponse.:ccool:
edit, j'ai déjà modifier le code proposé en mieux :
Mais je suis preneur de solution autres !
partage de variable avec plusieurs taches.
bonjour, je reviens avec mon problème etendue par la multiplicité de mes tache "cliente".
J'avais fait ceci :
Tache cliente
Code:
1 2 3 4 5 6 7 8 9
|
task body Client is
index : positive := ;
begin
loop
serveur.send(index);
--opération avec l'index
end loop;
end Client; |
Tache cliente
Code:
1 2 3 4 5 6 7 8 9 10 11
|
task body Serveur is
index : positive := 1;
begin
loop
accept Send(index : out positive) do
index := Serveur.index;
end Send;
--opération avec l'index
end loop;
end Serveur; |
Maintenant, je cherche comment partager l'index avec plusieurs autre tache Cliente.
J'ai exactement 5 taches (Global, Fx, Lead, Bass, Drums) qui doivent connaitre l'index à tout moment, mais en garantissant que la lecture ne s'effectuera qu'une seule fois pour chacune des tache cliente.
En espérant être clair, si non je complèterait, s'il vous plait, merci.
edit du coup c'est partage avec attente.