C++ While-Schleife, usleep()/Standbymodus (), wie nicht zu benutzen, 90% der CPU? (Ubuntu 12.04)

Nehme an, dass ich C++ - code wie

#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

Das Programm läuft Prima und tut, was seine angeblich zu tun, aber es wird mit bis zu 90%+ meiner cpu.

Es wurde mir vorgeschlagen, zu verwenden, usleep() in der while-Schleife immer 100ms oder so, da ich wirklich nur die Sorge um Dinge tun, die alle 500 MS sowieso. So, Sie Schwein die CPU wenn Sie nicht gebraucht werden.

So, ich habe es zu meiner while-Schleife wie so

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

Kompiliert er fein, aber wenn ich es ausführen, wird das Programm hängen direkt an usleep und nie wieder zurückkehren. Ich habe irgendwo gelesen, dass vor dem Aufruf usleep, braucht man zum leeren aller Puffer, also habe ich geleert, alle Datei-streams und couts etc etc. Immer noch kein Glück.

Ich gesucht habe für 2 Tage für eine Lösung. Ich habe sleep() auch kein Glück.

Fand ich ein paar alternativen, aber Sie scheinen kompliziert und werden noch eine Menge code zu meinem Programm, dass ich nicht wirklich ganz verstehen, die komplizierter und machen es chaotisch, und es könnte nicht funktionieren.

Ich habe nie wirklich zu viel Gedanken in meine while () - Schleifen vor, weil die meisten der Programme, die ich schrieb, waren für mikrocontroller oder FPGAs ist das kein problem, zu hog den Prozessor.

Wenn jemand helfen kann.... alle Ressourcen, links,Bücher? Danke.

Bitte sagen Sie mir, Sie sind nicht mit CPU-Takt, um Zeit zu Messen...
Können Sie Ihre komplette while () - Schleife. Es könnte viele Gründe für diese, und dies ist bekannt als busy-loop problem. usleep() würde nicht zu hängen. Es ist etwas anderes falsch in Ihrem code.
Ich wundere mich, -- gibt es etwas zu tun für das Programm oder ist es einfach nur tatenlos polling irgendwo? Wenn es etwas zu tun, bekommen es schneller zu erledigen sollte nicht Schaden (auf *nix oder windows könnte man die prio aber). Wenn Sie polling, vielleicht gibt es eine ereignisgesteuerte Lösung?
warum gehst du nicht einfach registrieren, um eine timer-wake-up und rufen Sie jede halbe Sekunde, wenn das, was Sie wollen? dies scheint nicht die richtige Lösung, um mit zu beginnen. sind Sie sicher, es hängt bei usleep? vielleicht bist du nicht die Inkrementierung von 'Millisekunden' richtig.
verwenden Sie das signal in Ihrem Programm, durch Zufall?

InformationsquelleAutor user3474042 | 2014-04-11

Schreibe einen Kommentar