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

avec Java Discussion :

Compréhension d'un code (fonctionnement de Thread.sleep())


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Compréhension d'un code (fonctionnement de Thread.sleep())
    Bonjour a tous,
    Alors voilà je suis étudiant en BTS IRIS 2ième année et pour mon projet de fin d'année, je travail sur une maison domotique.
    Après de nombreuses recherches, je suis enfin parvenu à trouver un code me permettant d'afficher mes trames de mon bus KNX.
    J'ai commencé à le tester et à le commenter pour le comprendre, afin de pouvoir le modifier a mes attente.

    Mais voilà ligne 50 j'ai un : "thread.sleep(100000);"
    En testant j'ai constaté qu'en augmentant la valeur mon programme duré plus longtemps et réceptionnait plus de trames.
    Or quand j'ai consulté la doc java sur Thread, sleep est ,d'après se que j'ai compris, censé "endormir" un thread alors pourquoi je réceptionne toujours ?
    (code ligne 35 à 42)

    Et comment puis-je faire pour ne plus avoir d’arrêt, cad que j'affiche en continu ??

    Merci d'avance de votre aide ^^

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    public class Main
    {
        public static void main(String[] args)
        {
            KNXNetworkLinkIP netLinkIp = null;
            try
            {
                System.out.println( );
                //Cree un lien nouveau reseau base sur le protocole KNX/IP, en utilisant un KNXnetIPConnection.
                //KNXnetIPConnection : Interface pour travailler avec les réseaux KNX via une connexion réseau IP.
                //L'échange de données (envoi et réception) se fait à travers des messages de CEMI.
                //Les événements asynchrones ou entrant sont relayés vers les listener enregistrés.
    			    //Mode de fonctionnement ici en tunnel.
                netLinkIp = new KNXNetworkLinkIP( KNXNetworkLinkIP.TUNNEL,
    			    //Adresse IP de l'ordinateur local.
    			    new InetSocketAddress(InetAddress.getByName(" IP Local "), 0),
                                //Adresse IP de l'ordinateur distant.
    			    new InetSocketAddress(InetAddress.getByName("IP Distante "),KNXnetIPConnection.IP_PORT),
    			    //Boolean useNAT
    			    false,
    			    //Fournit les paramètres nécessaires à la communication sur les TP (paire torsadée) à moyen terme.
    			    //Ce type est utilisé pour les réglages médium paire torsadée TP0 (false) et TP1 (true).
    			    new TPSettings(false));
                System.out.println("*** Connected ***");
    	    //Fournit un processus de communication avec un réseau KNX.
                ProcessCommunicator pc = new ProcessCommunicatorImpl(netLinkIp);
    	    //Ajoute un Listener sur netLinkIP
                netLinkIp.addLinkListener(
                        new NetworkLinkListener( )
                        {
                            @Override public void confirmation(FrameEvent arg0)
                            {
    			}
                            @Override public void indication(FrameEvent arg0)
                            {
    			//Execute a chaque reception de trame KNX
                                System.out.println("srcadress " + arg0.getSource( ));
                                System.out.println(arg0.getSource( ).getClass( ));
    	                    System.out.println("targetadress " + ((tuwien.auto.calimero.cemi.CEMILData)arg0.getFrame( )).getDestination( ));
    			    System.out.println("PayLoad : " + ((tuwien.auto.calimero.cemi.CEMILData)arg0.getFrame( )).getPayload( ) );
                            }
                            @Override public void linkClosed(CloseEvent arg0)
    			{
    			}
                        });
                        try
                        {
                            Thread.sleep(100000);
                        }
                        catch (InterruptedException e)
                        {
                            e.printStackTrace( );
                        }
                        netLinkIp.close( );
            }
            catch (KNXLinkClosedException e)
            {
                e.printStackTrace( );
            }
            catch (KNXFormatException e)
            {
                e.printStackTrace( );
            }
            catch (KNXException e)
            {
                e.printStackTrace( );
            }
            catch (UnknownHostException e)
            {
                e.printStackTrace( );
            }
            finally
            {
                if (netLinkIp != null)
                {
                    netLinkIp.close( ); System.out.println("Connexion closed");
                }
            }
        }
    }

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    La pause se situe sur le Thread principal de ton application, le "main". Il y a un autre Thread, interne aux objets construits, qui écoute et affiche les infos réseau.
    Augmenter la pause du Thread principal permet donc d'augmenter le temps d'écoute et d'affichage pour les informations réseau.
    Ton code est mal indenté pour le Thread.sleep : il n'appartient pas à la déclaration du listener mais au code du programme principal.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup de ta réponse qui a bien ma bien éclairé dinobogan.
    (désolé pour la réponse un peut tardive, je n'ai pas eu le temps de revenir avant ^^)

    Mais dis moi, est ce possible de ne pas avoir de temps limité?
    Que je puis écouter en continu ?

    Par exemple, tans qu'une variable n'a pas pris une certaine valeur déclenchant la fin du programme ?

    Merci d'avance

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    A priori, tout se passe dans le listener, méthode indication. Mais je ne connais pas les objets que tu utilises.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Il y a sûrement un moyen propre d'écouter un signal d'arrêt, mais on ne va pas deviner comment KNX propose ça.

    Si vraiment il n'y en a pas, le plus simple est de créer un objet quelconque qui servira de notification entre le thread principal et le listener.

    Cet objet est créé avant d'appeler le listener, et rendu accessible au listener. Puis le listener est appelé, puis le thread principal, qui doit maintenant attendre indéfiniment, se synchronise sur l'objet et fait un wait() infini dessus.

    Quand le listener décide qu'à présent le programme devrait terminer, il se synchronise sur l'objet, fait notify() dessus et s'arrête. Le notify() va réveiller le thread principal, qui lui aussi s'arrête et termine le programme.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour vos réponses

Discussions similaires

  1. [JMF] Code fonctionnant sous Linux mais pas sous XP
    Par Monsieur_Max dans le forum Multimédia
    Réponses: 4
    Dernier message: 25/05/2006, 18h57
  2. Un alert() en plus et mon code fonctionne, sans il foire :|
    Par narnou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/03/2006, 13h44
  3. Problème d'execution de code dans un thread
    Par [Silk] dans le forum Langage
    Réponses: 2
    Dernier message: 06/02/2006, 13h49
  4. [Thread] PB Thread.sleep(1000) marche pas
    Par kliel dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 03/12/2004, 13h47
  5. [Thread]sleep()
    Par jokoss dans le forum Concurrence et multi-thread
    Réponses: 15
    Dernier message: 03/07/2004, 14h33

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