+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : juin 2006
    Messages : 933
    Points : 413
    Points
    413
    Billets dans le blog
    1

    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.

  2. #2
    Nouveau Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2012
    Messages : 27
    Points : 35
    Points
    35

    Par défaut

    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.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : juin 2006
    Messages : 933
    Points : 413
    Points
    413
    Billets dans le blog
    1

    Par défaut

    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.
    ?

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •