C++ Zeit runterzählen ohne CPU auslastung ?
-
Hiho,
also mein problem ist das ich eine bestimmte zeit angeben will und das programm nach ablauf dieser zeit etwas ausführt.
So weit so gut,
#include <iostream> #include <time.h> #include <stdlib.h> using namespace std; main(){ unsigned int minuten,sekunden,ziel; cin >> minuten; //Zeit in min. einlesen sekunden = minuten * 60; ziel = time(NULL) + sekunden; //Zielzeit ermitteln while(time(NULL)!=ziel); //schleife bis die Zielzeit erreicht ist cout << "Ende."; }
das funktioniert auch, nur belastet das durch die schleife die ständig die aktuelle zeit abfragt natürlich die cpu...
Kennt jemand vllt. eine cpu schonendere möglichkeit ?
Mfg Bronko
-
Statt
while(time(NULL)!=ziel); //schleife bis die Zielzeit
kannst Du je nach Betriebssystem auch
sleep(ziel-time(NULL));
oder
Sleep((ziel-time(NULL))*1000);
oder
oderdelay((ziel-time(NULL)*1000);
nehmen. Aber stets ist das kein reines C++, sondern die sleep-Funktionen sind abhängig vom Betriebsystem.
-
Danke. Gibt es auch die möglichkeit das ohne sleep zu lösen ?
-
Wahrscheinlich nur mit Assembler oder externen Libs. Du musst den Prozessor für deinen Prozess ja quasi "schlafen legen". Glaube nicht das standard C/C++ sowas kann.
-
Bronko schrieb:
Danke. Gibt es auch die möglichkeit das ohne sleep zu lösen ?
Sleep/sleep/delay/... machen *genau* das was du willst. Wieso sollte es dann eine andere Lösung geben, bzw. wieso suchst du eine?
Oder willst du eine plattformunabhängige Lösung? Die gibt es soweit ich weiss nicht.
Es gibt allerdings plattformübergreifende Libraries wie Qt oder Boost (sleep ist glaube ich in Boost.Thread), die die Unterschiede "wegkapseln".
-
Oder willst du eine plattformunabhängige Lösung?
genau.
Es gibt allerdings plattformübergreifende Libraries wie Qt oder Boost (sleep ist glaube ich in Boost.Thread), die die Unterschiede "wegkapseln".
Das guck ich mir mal an, danke.
-
hustbaer schrieb:
..., die die Unterschiede "wegkapseln".
Schöne Beschreibung
-
Bronko schrieb:
Oder willst du eine plattformunabhängige Lösung?
genau.
Dann schreib das das nächste mal auch, und nicht nur einfach "eine andere Lösung".