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
    oder

    delay((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".


Anmelden zum Antworten