Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > Ada
Ada Forum d'entraide sur la programmation en langage Ada
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/10/2012, 12h16   #1
jovalise
Membre éclairé
 
Inscription : juin 2006
Messages : 767
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2006
Messages : 767
Points : 328
Points : 328
Par défaut Paralellisme et centralisation

Bonjour.
j'essai de concevoir un programme avec Ada qui génrère des message MIDI pour exploiter un instrument MIDI.

J'ai écrit un paquetage "Device" qui fournit le type Device_Type, permet de l'initialiser, ouvrir, écrire, fermer un périphérique MIDI.
Ce paquetage doit être exploité par un paquetage "Sheduler" qui doit permettre de séquencer les message MIDI de multiple générateurs(FX, lead, bass, drums, global) grace à une tache décrite comme suit :
Code ada :
1
2
3
4
5
6
7
8
task Sheduler_Process is
   entry Start;
   entry Stop;
   entry Reset;
   entry Halt;
   entry Receive(Message : in Message_Type; step : in Positive);
end Sheduler_Process;

Mon problème consiste à trouver comment démarrer, stopper les divers process - Sheduler, FX, Lead, bass, global.

Je peux le faire depuis le main qui instancie chacun des générateurs avec le sheduler en paramètre :

Code ada :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

   Device : Device_Type;
begin
   Initialise(Device);
   if not intialized(device) then
      raise Specification_Error;
   end if;
   declare
       package Sheduler is new Midi.Sheduler(Device);
       package Global is new Midi.Global(Sheduler);
       package Fx is new Midi.Fx(Sheduler);
       -- etc
    begin
       Global.initialize;
       FX.initialize;
       -- etc
       Sheduler.Sheduler_Process.Start;
       Global.Global_Process.start;
       Fx.Fx_Process.Start;
       -- etc

Mais n'y a- t- il plus élégant/fonctionnel à faire ?
Merci.
__________________
Mon développement
jovalise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2012, 00h46   #2
Sigurd9
Nouveau Membre du Club
 
Homme
Enseignant
Inscription : avril 2012
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2012
Messages : 26
Points : 39
Points : 39
Perso je ne déclarerais pas de tâche mais un type tâche. Puis je déclarerais un pointeur sur mon type tâche. Ainsi, la tâche créée ne commencerais pas à begin mais seulement lorsque j'écrirais

Code :
MonPointeur := new MonTypeTache ;
Et en utiliserant ada.unchecked_deallocation, cela mettrait fin à la tâche pointée (certes de manière un peu [beaucoup] barbare). Tu peux aussi créer une liste chaînée ou un tableau de pointeurs vers tâche pour limiter les variables.
Sigurd9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2012, 01h27   #3
jovalise
Membre éclairé
 
Inscription : juin 2006
Messages : 767
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2006
Messages : 767
Points : 328
Points : 328
Citation:
Envoyé par Sigurd9 Voir le message
Perso je ne déclarerais pas de tâche mais un type tâche. Puis je déclarerais un pointeur sur mon type tâche. Ainsi, la tâche créée ne commencerais pas à begin mais seulement lorsque j'écrirais

Code :
MonPointeur := new MonTypeTache ;
Et en utiliserant ada.unchecked_deallocation, cela mettrait fin à la tâche pointée (certes de manière un peu [beaucoup] barbare). Tu peux aussi créer une liste chaînée ou un tableau de pointeurs vers tâche pour limiter les variables.
Y a de l'idée.. Mais ça répond pas au problème de la séquencialité du démarage des taches. Je voudrais les démarer les arrêter toute en un instant.
?
__________________
Mon développement
jovalise est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h31.


 
 
 
 
Partenaires

Hébergement Web