Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1472 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  C# 100 % de temps CPU avec un TCPListener

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C# 100 % de temps CPU avec un TCPListener

n°826486
gutso
Posté le 19-08-2004 à 09:49:04  profilanswer
 

Salut
 
J'ai écrit un petit serveur Web en C# avec une fonction ecoute pour traiter les demande de connection par les clients :
 

Code :
  1. public void ecoute(){
  2.   IPAddress locale = IPAddress.Parse("127.0.0.1" );
  3.   TcpListener listener = new TcpListener(locale,port);
  4.   listener.Start();
  5.   _running = true;
  6.   while(_running){
  7.     try{
  8.      if(listener.Pending()) {
  9.        TcpClient connection = listener.AcceptTcpClient();
  10.        try{
  11.         service(connection);
  12.        }catch(Exception ex){
  13.         intf.ecrireLog("Erreur de service "  + ex.Message);
  14.        }
  15.      connection.Close();
  16.      }
  17.     }catch(Exception ex){
  18.      _running = false;
  19.     }
  20.   }
  21. }


 
La méthode ecoute est lancée dans un Thread à l'intérieur de l'objet serveur :
 

Code :
  1. Thread tService = new Thread(new ThreadStart(ecoute));
  2. tService.start();


 
Tout fonctionne...à part le fait que dés que je lance tService.start(), j'ai pratiquement 100% de temps CPU pris par l'appli, que je sois en Windows.Form ou en console, et quelle que soit la priorité du thread tService (normal, lowest..)  :heink:  
 
Quelqu'un pourrait m'aider ?  :cry:

mood
Publicité
Posté le 19-08-2004 à 09:49:04  profilanswer
 

n°827373
Taz
bisounours-codeur
Posté le 20-08-2004 à 00:51:56  profilanswer
 

j'ai pas encore testé C# en réseau, je me suis pas encore penché sur l'API. si ça se trouve y a une .Méthode pour faire ça, dans le cas contraire, insère toi même un temporisation à chaque itération de boucle.
 
Par exemple, je ferais un
 
if(listener.Pending())
{ /* action */ }
else
{ Thread.Sleep( 100 ); }
 
 
edit : d'ailleurs quand j'y pense, il doit y avoir un truc avec des AsynCallBack pas très loin
 
 
sinon tu peux faire en bloquant, avec .AcceptTCPClient() et .AcceptSocket()


Message édité par Taz le 20-08-2004 à 00:55:54
n°827541
gutso
Posté le 20-08-2004 à 10:56:29  profilanswer
 

Oui c'est ça, je croyais que listener.Pending() était une méthode synchronisée bloquante, comme listener.AcceptTcpClient(), et en fait non, résultat des courses, j'avais une magnifique boucle infinie avec listener.Pending() qui me renvoyait true et un beau while(true) au dessus.
 
J'ai enlevé la conditionnelle sur le pending et tout est OK.
 
Merci à toi en tout cas :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  C# 100 % de temps CPU avec un TCPListener

 

Sujets relatifs
[Visual C++?] temps d'executionobtention du temps en millisecond en C,C++
Preloader avec affichage du temps restantIntervalle de temps requete SQL
[C] Fermeture application après un certain tempsDu temps réel online avec Perl : CGI forcément ?
Addtionner des temps en PHPpb de requetes prenant du temps
calcul le temps de l installationExecuter un script à intervalle de temps régulier sans être gourmand
Plus de sujets relatifs à : C# 100 % de temps CPU avec un TCPListener


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR