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

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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ß! :)

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.


adulescentulus 
Beitragsersteller
 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