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 :

Problème charge processeur


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 327
    Points : 114
    Points
    114
    Par défaut Problème charge processeur
    Bonsoir,

    Voila j'ai fait une petite application de tchat, pour l'instant ça marche bien mais j'ai remarqué un petit soucis, lorsque je démarre mon application j'ai le processeur qui monte à fond et c'est cette classe qui me fais ça:

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    package client;
     
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.Socket;
     
    import javax.swing.JOptionPane;
     
    public class Envoie implements Runnable {
    	private Socket socket;
        private PrintWriter out;
        private Thread t;
        private static boolean deco = false;
        private static boolean echec = false;
        private String name;
        private InterfaceGraphique fenetre;
        private String texte;
        private Client client;
     
        	public Envoie (InterfaceGraphique fenetre, Client client) {
        		this.fenetre = fenetre;
        		this.client = client;
        	}
     
    		@Override
    		public void run () {
    	    	String fromUser = "";
    	    	try {
    		    	while (true) {
    			    	// envoie
    		    		fromUser = this.texte;
    		    		if (fromUser != null && fromUser.length () != 0) {
    		    			if (this.out != null && !fromUser.equals ("connect")) {
    				    		this.out.println (this.name + ":" + fromUser);
    				    	}
    		    			if (fromUser.equals ("deco")) {
    		    				if (Envoie.deco) {
    				    			JOptionPane.showMessageDialog (this.fenetre, "Vous etes deja deconnecte du serveur");
    				    		}
    				    		else {
    				    			this.socket.close ();
    				    			Envoie.deco = true;
    				    		}
     
    		    			}
    				    	else if (fromUser.equals ("quitter")) {
    							this.socket.close ();
    							this.out.close ();
    				    		break;
    						}
    				    	else if (fromUser.equals ("connect")) {
    						    if (Envoie.deco) {
    						    	this.client.connection ();
    						    	this.connection ();
    						    }
    						    else {
    						    	JOptionPane.showMessageDialog (this.fenetre, "Vous etes deja connecte au serveur");
    						    }
    						}
    						fromUser = null;
    						this.texte = null;
    			    	}
    		    	}
    	    	}
    	    	catch (IOException e) {
    	    		JOptionPane.showMessageDialog (this.fenetre, "Erreur de I/O avec l'hote dans la classe Envoie");
    			}
    		}
     
    		public void connection () {
    	    	try {
    	    		if (!Envoie.echec) {
    	    			this.socket = this.client.getSocket ();
    		    		this.out = new PrintWriter (this.socket.getOutputStream (), true);
    		    		if (!Envoie.deco) {
    		            	this.t = new Thread (this);
    			            this.t.start ();
    		            }
    		            if (this.out != null) {
    			    		this.out.println (this.name);
    			    	}
    		    		Envoie.deco = false;
    	    		}
    	        } 
    	    	catch (IOException e) {
    	            JOptionPane.showMessageDialog (this.fenetre, "Soucis d'I/O avec l'hote");
    	        }
    	    	catch (NullPointerException e) {
    	    		JOptionPane.showMessageDialog (this.fenetre, "Pointeur null reçu");
    	    	}  
    	    }
     
    		public void setName (String name) {
    	    	this.name = name;
    	    }
     
    	    public void setTexte (String texte) {
    	    	this.texte = texte;
    	    }
     
    	    public static void deconection () {
    	    	Envoie.deco = true;
    	    }
     
    	    public static void echecConnection (boolean echec) {
    	    	Envoie.echec = echec;
    	    }
     
    	    public static boolean getDeconnection () {
    	    	return Envoie.deco;
    	    }
    }
    Cela doit très certainement être ma boucle mais je ne vois pas pourquoi Si quelqu'un a une solution je l'en remercie d'avance

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    parce que tu as une boucle qui tourne en ocntinu dans ton while(true). Comme elle n'arrête jamais de tourner, elle va donc occuper tous les cycles CPUs qu'elle peut.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 327
    Points : 114
    Points
    114
    Par défaut
    Je me doute bien que c'est ma boucle, mais il y aurait-il un moyen pour éviter ceci ?

    car dans ma classe qui reçois les messages j'ai aussi une boucle infinie mais elle ne me prend pas toutes les ressources CPU comme ça

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    probablement parce qu'elle recois ses message d'un socket réseau et qu'elle fait des appel bloquants sur la socket pour recevoir des message. Tu n'a rien de tout ca dans ton thread, donc rien qui va le mettre en sommeil. Pour "éviter" çà, il faut revoir le design de ton code. Déjà pourquoi t'as besoin d'un thread qui envoie les commandes, pourquoi ne pas simplement envoyer les commande directement depuis ton interface?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 327
    Points : 114
    Points
    114
    Par défaut
    En effet c'est la solution que j'ai adopté. Merci du conseil maintenant ça marche bien

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

Discussions similaires

  1. problème consommation processeur
    Par picall dans le forum Embarqué
    Réponses: 19
    Dernier message: 19/07/2013, 16h39
  2. Javascript et charge processeur
    Par asagtoth dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 03/06/2009, 21h20
  3. [D7] Récupérer charge processeur, mémoire libre ?
    Par chipster45 dans le forum Delphi
    Réponses: 4
    Dernier message: 01/04/2007, 22h37
  4. [Système] Charge processeur utilisée
    Par dinver dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 22/01/2006, 02h03

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