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 ada : Sélectionner tout - Visualiser dans une fenêtre à part
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 ada : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Mais je trouve pas ça très joli perso. N'y a t- il pas plus légé ?
Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Afficher(variable) if Running then Racksheduler.send(Ma_Variable); end if;
Merci pour vos réponse.
edit, j'ai déjà modifier le code proposé en mieux :
Mais je suis preneur de solution autres !
Partager