IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Concurrence et multi-thread Java Discussion :

[Info]Sequenceur fiable: Timers, Threads


Sujet :

Concurrence et multi-thread Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut [Info]Sequenceur fiable: Timers, Threads
    Salut a tous,

    Voila je suis en train de concevoir une boite a rytmes en java et je commence donc par le sequenceur. Pour l'instant je veut simplement jouer un son en repetition à un interval donné, j'ai essayer plusieures techniques mais aucune n'a l'air vraimment fiable, les sons ne sont pas en rytmes.

    J'ai tout d'abord essayer avec un Thread et une boucle infinie dnas la quelle j'ai placé un sleep() apres la lecture du son, puis j'ai utiliser le Timer de swing et celui de Util mais tjrs rien de reelement fiable alors que c'est une version qui ne joue qu'un seul son.
    J'ai penssé optimisé la lecture du son en lancant à chaque interval un nouveau Thread qui se charge de jouer le son de son coté, et cela va deja mieu.

    En tout cas j'ai pu voir quelques boite a rytmes faite en java ou les rytmes etait fiables ( mais ou les developpeurs n'ont pas consentit à ce qu'on comprenne comment il ont fait... ) et je me demandait donc si quelqun connaissait une bonne technique.
    Dailleur si quelqun connait la maniere la plus optimale pour jouer un son, cela mintersse.

    merci a tous

  2. #2
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    303
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 303
    Points : 201
    Points
    201
    Par défaut
    salut

    il faut faire un producteur/consommateur, un qui joue la music et notifie le 2eme,attend la fin du morceau et gere l'interval de repetition du morceau et un autre qui test la fin de la music et notifie le 1er.

    chuss

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    ok merci, j'ai trouver la classe Timer de javax.management qui fonctionne en mode producteur / consomateur et sa a l'air pa mal du tout mais je ne comprend pas bien comment l'utiliser sachant que je doit passer un Objet userData qui sera notifier en repetitition pour quil execute une action (en l'ocurence jouer un son) mais je ne trouve pas quelle methode il doit implementer pour executer l'action.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Integer addNotification(String type,
                                   String message,
                                   Object userData,
                                   Date date,
                                   long period,
                                   long nbOccurences)
                            throws IllegalArgumentException
    type - The timer notification type.
    message - The timer notification detailed message.
    : userData - The timer notification user data object.:
    date - The date when the notification occurs.
    period - The period of the timer notification (in milliseconds).
    nbOccurences - The total number the timer notification will be emitted.

    voila si quelqun connait ce nouveau package !

  4. #4
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Salut

    userData est un objet d'une classe qui doit écire. Cet objet contient les informations que tu as besoin lors de la notification pour connaître que faire avec cette notification.
    Bien le bonjour chez vous
    Jowo

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    mais cet objet doit bien contenir une methode qui sera executé lors de la notification , du style run() ou actionPerformed() non ?

  6. #6
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    303
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 303
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par vienin
    mais cet objet doit bien contenir une methode qui sera executé lors de la notification , du style run() ou actionPerformed() non ?
    j'espere que ca va t'aider, je n'ai pas tester et j'ai laissé tomber le model producteur consommateur

    Code : 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    public class MoniteurZic extends Applet{
        private boolean pasZic = true;
        AudioClip morceau= getAudioClip(getDocumentBase(),"tonmorceau");
     
        class Chrono extends Thread {
            int duree;
            public Chrono(int d) {duree=d;}
            public void run() {
              try {sleep(duree);} catch (InterruptedException e) {}
              notify();
            }
          }
     
        Joueur j;
        public void start () {
            j=new Joueur(); j.start();
         }
     
        synchronized void attendre() {
            try{wait();} catch(InterruptedException e){}
          }
     
        static void prononce(AudioClip audio, int duree) {
            audio.play(); try {Thread.sleep(duree);} catch (InterruptedException e){}
          }
     
        class Joueur extends Thread {
            public void run() {
                synchronized(MoniteurZic.this){ 
                    while (true) {
                      Chrono c = new Chrono(5000);  
                      c.start();
                      attendre();
                      prononce(morceau,3000);
                    }
                }
        }
        }
    }
    tu me tiens au courent stp

    Merci

    chuss

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    ok je v tester sa mais je n'ai aucune confiance en le sleep() de la classe thread question regularité.

    mais il me semble apres etude que la classe javax.management.timer a lair ideal, mais je ny comprend tjr rien

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Euh sinon j'ai pas capter le passage la

    on dirait une declaration de fonction dans une methode koi ke pas tant que sa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void run() {
                synchronized(MoniteurZic.this){
                    while (true) {
                      Chrono c = new Chrono(5000); 
                      c.start();
                      attendre();
                      prononce(morceau,3000);
                    }
                }
    ou alors jalucine

  9. #9
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    303
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 303
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par vienin
    Euh sinon j'ai pas capter le passage la

    on dirait une declaration de fonction dans une methode koi ke pas tant que sa

    public void run() {
    synchronized(MoniteurZic.this){
    while (true) {
    Chrono c = new Chrono(5000);
    c.start();
    attendre();
    prononce(morceau,3000);
    }
    }

    ou alors jalucine
    oui c'est ca, tu peux tres bien mettre aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
       synchronized void jouer (){
                    while (true) {
                      Chrono c = new Chrono(5000); 
                      c.start();
                      attendre();
                      prononce(morceau,3000);
                    }
          }
     
         public void run() { 
                jouer().start();
         }

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/09/2008, 10h51
  2. Problème timer thread et swt
    Par kitue dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 07/06/2008, 12h22
  3. [timer & thread] timeout & socket non bloquant
    Par untipy dans le forum Réseau
    Réponses: 33
    Dernier message: 22/08/2007, 08h37
  4. Timer,Thread et barre d outil
    Par jhdscript dans le forum C++Builder
    Réponses: 4
    Dernier message: 28/11/2006, 12h20
  5. Réponses: 1
    Dernier message: 09/08/2006, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo