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

Java Discussion :

Programme qui consomme beaucoup de CPU


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Septembre 2012
    Messages : 33
    Points : 29
    Points
    29
    Par défaut Programme qui consomme beaucoup de CPU
    Salut,
    j'ai fais un programme de tchat avec les sockets et il fonctionne , mais le problème c'est qu'il consomme presque 26% du processeur , j'ai constaté que les portions du programme responsables de ce problème sont les suivantes:

    le 1er threads pour la réception des messages:
    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
    public void run() {
    		// TODO Auto-generated method stub
    		while(!stop){
    			try {
    				if((MsgRecu = in.readLine())!=null){
    				System.out.println(MsgRecu);
    				fenetre.recu(MsgRecu);
    				}
    			} catch (IOException e) {
    				e.printStackTrace();
    				try {
    					in.close();
    				} catch (IOException e1) {
    					e1.printStackTrace();
    				}
    				break;
    			}
    		}
    	}
    Le 2ème thread pour l'émission
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void run() {
    		while(!stop&&message!=null){	
    		if(envoyer){
    			message=fenetre.envoyer();
    		out.println(message);
    		out.flush();
    		envoyer=false;
    		}
    	}
    
    out.close();
    	}
    Est ce que quelqu'un peut me proposer une solution ,pour empcher le processus de travailler tant que aucun message n'est encore arrivé?

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut
    Tu n'es peut-être pas obligé de vérifier les messages non-stop. Ton utilisateur peut peut-être tolérer un délai d'une seconde par exemple. Tu peux donc peut-être mettre ton Thread en pause quelques centaines de millisecondes après avoir lu tous les messages reçus. Tu recommences ensuite. Ca c'est si tu n'as pas de moyen d'être averti quand un message est arrivé.

    Quant à l'émission, tu peux te contenter d'émettre seulement au moment où un message est envoyé. Pas besoin de vérifier en permanence puisque c'est toi qui contrôle.

    D'une manière générale, il vaudrait mieux que tu essayes de baser ton code sur une logique de Listener plutôt que sur une logique procédurale.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Septembre 2012
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Sharcoux Voir le message
    Tu n'es peut-être pas obligé de vérifier les messages non-stop. Ton utilisateur peut peut-être tolérer un délai d'une seconde par exemple. Tu peux donc peut-être mettre ton Thread en pause quelques centaines de millisecondes après avoir lu tous les messages reçus. Tu recommences ensuite. Ca c'est si tu n'as pas de moyen d'être averti quand un message est arrivé.

    Quant à l'émission, tu peux te contenter d'émettre seulement au moment où un message est envoyé. Pas besoin de vérifier en permanence puisque c'est toi qui contrôle.

    D'une manière générale, il vaudrait mieux que tu essayes de baser ton code sur une logique de Listener plutôt que sur une logique procédurale.



    j'ai basé le code sur les listener et maintenant et il ne consomme pas beaucoup , merci

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut
    Content d'avoir pu t'aider.
    Passe en résolu stp.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Septembre 2012
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Sharcoux Voir le message
    Content d'avoir pu t'aider.
    Passe en résolu stp.
    le problème est de la classe de l'émission, la solution est :

    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
    public void run() {
    		while(true){
    		this.suspend();
    		if((message=fenetre.envoyer())!=null){
    		out.println(message);
    		out.flush();
    		}
    		}
    	}
     
    	// si on appui sur la bouton envoi
    	@SuppressWarnings("deprecation")
    	public void actionPerformed(ActionEvent arg) {
    		this.resume();	
    	}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/03/2013, 18h33
  2. Réponses: 9
    Dernier message: 05/03/2013, 12h07
  3. Wscript et Cscript qui consomme beaucoup de RAM
    Par Dgeo77 dans le forum VBScript
    Réponses: 9
    Dernier message: 05/11/2008, 17h42
  4. Petit programme qui pompe 50% de CPU
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 16/01/2007, 11h03
  5. programme qui consomme beaucoup de memoire
    Par gaut dans le forum Windows
    Réponses: 10
    Dernier message: 01/02/2005, 20h33

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