Erreur "broken pipe" et flush de stdout

Erreur "broken pipe" et flush de stdout - C++ - Programmation

Marsh Posté le 10-06-2005 à 15:03:28    

Bonjour
 
travaillant sur des algorithmes appliques a un grand nombre d'images et donc longs a s'executer, j'ai ecrit une petite fonction pour simuler une barre de chargement dans un terminal afin de savoir quel pourcentage du travail est effectue :
 

Code :
  1. void loading(int i, int size)
  2. {
  3.       if (i==-1)
  4. cout<<"\b\b\b\b";
  5.       else
  6. printf("%03d%%",(int)((double)(i+1)/size*100));
  7.   cout.flush();
  8. }


 
appele comme ceci

Code :
  1. for( it = imagesNames.begin(); it != imagesNames.end(); it++, i++ )
  2.     {
  3.       loading(i, size);
  4.       // traitement sur l'image courante
  5.       loading(-1);
  6.     }


 
On obtient donc un compteur de pourcentage qui s'incremente.
Le probleme est que des fois au lieu que le pourcentage s'affiche j'ai une erreur "broken pipe".
 
Y'a t'il des precautions particulieres a prendre qd on utilise cout.flush() puisqu'apparemment le pb vient de la ?
 

Reply

Marsh Posté le 10-06-2005 à 15:03:28   

Reply

Marsh Posté le 10-06-2005 à 15:30:41    

up to di time

Reply

Marsh Posté le 13-06-2005 à 12:13:57    

question bete peut-être mais ça sert à quoi concretement cout.flush() ?

Reply

Marsh Posté le 13-06-2005 à 12:15:54    

Je me pose exactement la même question lol

Reply

Marsh Posté le 13-06-2005 à 13:47:24    

bah a flusher ce qui est bufferisé non?


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 13-06-2005 à 16:29:10    

il y'est pour forcer le réaffichage de la ligne courante

Reply

Marsh Posté le 13-06-2005 à 16:59:57    

l'ecriture sur l'entrée standard
 
a par ca tu flush cout mais tu n'ecris pas forcement, printf ca ecris sur l'objet stdout et c'est du C...

Reply

Marsh Posté le 15-06-2005 à 10:57:56    

merci. je vais remplacer ce printf par l'équivalent avec cout

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed