Suche eine Beispiel für eine Endlos-Schleife in c++ ohne 100% CPU last?

...komplette Frage anzeigen

3 Antworten

Du hast 100% CPU Last, weil du 200 Mikrosekunden wartest, und nicht 200 Millisekunden!

Außerdem ist die Zahl 200 etwas hart an der Kante, wenn wirklich alle 200ms ein Poll erwartet wird. Nimm lieber 175 oder so. :)

Probier mal:

usleep(175000);

Im Übrigen gilt usleep() als obsolet, und du solltst lieber nanosleep() verwenden:

#include <time.h>

// ...

struct timespec req;
req.tv_sec = 0;
req.tv_nsec = 175000000;

while(true){
MyClass->PollDevice();
nanosleep(&req, NULL);
}

Aaaaaber, da du ja von C++ und nicht von ANSI-C sprichst, kannst du auch einfach den plattformübergreifenden Weg mithilfe der STL nehmen:

#include <chrono>
#include <thread>

// ...

using namespace std;
auto millis = chrono::milliseconds(175);

while (true) {
MyClass->PollDevice();
this_thread::sleep_for(millis);
}

Dazu muss dein Compiler aber mindestens C++11 unterstützen.

Naja, viel Spaß! :)

Antwort bewerten Vielen Dank für Deine Bewertung

Das Problem liegt vermutlich nicht in der Schleife, sondern deine Poll...
Com-port-bibliotheken bieten Meist Callbacks an, wenn Daten anstehen, genauso wie TCP-Bibliotheken.

Antwort bewerten Vielen Dank für Deine Bewertung
adulescentulus 24.06.2016, 12:22

Also es ist ein USB CoinAcceptor und ich nehme für den Poll eine CccTalk Library direkt vom Hersteller

0

Hallo,

Versuchs mal hiermit

http://cpulimit.sourceforge.net

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?