C++ boucle While, usleep()/sleep() ne pas utiliser de 90% du CPU? (Ubuntu 12.04)

Supposons que j'ai un code C++ comme

#include "myheaderfiles.h"
//..some stuff
//...some more stuff
int main()
{
   double milliseconds;
   int seconds;
   int minutes;
   int timelimit=2;
   ...
   ...
   //...code here that increments 
   //.....milliseconds,seconds, and minutes

   while(minutes <=timelimit)
   {
      //...do stuff
      if(milliseconds>500)
      {
         //...do stuff 
         //...every half second
      } //end if
   } //end while
}//end main

Le programme fonctionnent très bien et fait ce que son supposé le faire, mais il va utiliser jusqu'à 90%+ de mon cpu.

Il m'a été suggéré d'utiliser usleep() dans ma boucle while jamais 100ms depuis que j'ai vraiment ne se soucient de faire des trucs tous les 500ms de toute façon. De cette façon, il monopolisent le CPU lorsqu'il n'est pas nécessaire.

Donc je l'ai ajouté à ma boucle while comme

   while(minutes <=timelimit)
   {
      //...do stuff
      if(milliseconds>500)
      {
         //...do stuff 
         //...every half second
      } //end if
      usleep(100000);
   } //end while

Il compile bien, mais quand je le lance, le programme va se bloquer droit à usleep et ne jamais revenir. J'ai lu quelque part qu'avant d'appeler usleep, on a besoin de vider tous les tampons, j'ai donc vidé tous les flux de fichiers et les couts etc etc. Toujours pas de chance.

J'ai cherché pendant 2 jours pour trouver une solution. J'ai utilisé sleep() aussi, avec pas de chance.

J'ai trouvé quelques solutions de rechange, mais ils semblent compliquées et va ajouter une grande quantité de code de mon programme que je n'ai pas vraiment de comprendre pleinement ce qui va compliquer et de le rendre sale, plus il pourrait ne pas fonctionner.

Je n'ai jamais vraiment mettre trop de pensée dans mon while() boucles avant parce que la plupart des programmes que j'écrivais étaient pour les microcontrôleurs ou des Fpga qui n'est pas un problème de porc le processeur.

Si quelqu'un peut aider.... des ressources, des liens,des livres? Merci.

S'il vous plaît dites-moi, vous n'êtes pas à l'aide du PROCESSEUR de l'horloge pour mesurer le temps...
Pouvez-vous montrer votre boucle while (). Il pourrait y avoir de nombreuses raisons pour cela, et ce qui est connu comme boucle occupée de problème. usleep() n'entraînerait pas de se bloquer. Il y a autre chose de mal dans votre code.
Je me demandais -- est-il quelque chose à faire pour le programme ou est-ce juste les bras croisés interrogation quelque part? Si il y a quelque chose à faire, que de le faire plus vite ne fait pas de mal (sous unix ou windows, on pourrait baisser les prio). Si vous êtes d'interrogation, peut-être il ya un événement piloté par la solution?
pourquoi ne pas vous venez de vous inscrire pour avoir une minuterie de réveil et de vous appeler toutes les demi-secondes si c'est ce que vous voulez? cela ne semble pas être la bonne solution pour commencer. êtes-vous sûr que c'est accroché à usleep? peut-être que vous n'êtes pas d'incrémentation de "millisecondes" correctement.
utilisez-vous du signal dans votre programme, par hasard?

OriginalL'auteur user3474042 | 2014-04-11