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 :

Thread et boucle


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut Thread et boucle
    Bonjour,

    J'utilise un thread pour traiter un son.

    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
    41
        try {
        	labsave.setText("Capture");
          final AudioFormat format = getFormat();
          DataLine.Info info = new DataLine.Info(
            TargetDataLine.class, format);
          final TargetDataLine line = (TargetDataLine)
            AudioSystem.getLine(info);
          line.open(format);
          line.start();
     
          Runnable runner = new Runnable() {
            int bufferSize = (int)format.getSampleRate() 
              * format.getFrameSize();
            byte buffer[] = new byte[bufferSize];
     
            public void run() {
              out = new ByteArrayOutputStream();
              running = true;
              try {
                while (running) {
                  int count = 
                    line.read(buffer, 0, buffer.length);
                  if (count > 0) {
                	 long seconds = (long) (line.getMicrosecondPosition() / 1000);
                	 lab.setText(TimetoHMS(seconds));
                     out.write(buffer, 0, count);
                  }
                }
                out.close();
              } catch (IOException e) {
                System.err.println("I/O problems: " + e);
                System.exit(-1);
              }
            }
          };
          captureThread = new Thread(runner);
          captureThread.start();
        } catch (LineUnavailableException e) {
          System.err.println("Line unavailable: " + e);
          System.exit(-2);
        }
    lab est un JLabel qui décompte le nombre de microsecondes écoulés.

    Cependant, il apparait que la mise à jour des microsecondes se fait toutes les secondes révolues !!!!!!

    Est-ce que les threads sont soumis à un lapse de temps de boucle ou à un sleep dissimulé ? Ou est_ce simplement dû à la durée de traitement des données audio qui, pour les fichiers wave, sont lourds ?

    Merci

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lab.setText(TimetoHMS(seconds));
    se fait dans un thread different de celui de l'interface graphique on dirait.
    Il faut, je penses, utiliser un SwingWorker.invokeLater autour des modification au element de ton GUI.

    Sinon jette un oeil ici, j'espere que cela aidera.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Comment gérer plusieurs threads en boucle ?
    Par [ZiP] dans le forum Langage
    Réponses: 15
    Dernier message: 12/07/2008, 13h12
  2. Boucle message dans un thread
    Par jhonnyBravo dans le forum Threads & Processus
    Réponses: 3
    Dernier message: 27/07/2007, 11h22
  3. [Débutant][Thread] Comment lancer en boucle un affichage
    Par comme de bien entendu dans le forum Général Java
    Réponses: 6
    Dernier message: 03/02/2006, 10h20
  4. Multi Thread et boucle infini...
    Par mickael777 dans le forum Threads & Processus
    Réponses: 9
    Dernier message: 05/01/2006, 20h53
  5. [Thread]Boucle infinie sans 99% du proc
    Par dinver dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 18/12/2005, 17h15

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