mit double rechnen



  • Hallo, ich möchte auf Linux die gesamte CPU-Auslastung ermitteln, meine Funktion hat das Problem, dass difference immer eine negative Zahl ausrechnet.
    Eigentlich müsste es doch unmöglich sein eine negative Zahl zu bekommen weil starttime >= idle.

    int getCompleteCPUUsage( const std::string& pathToUptime )
    {
        std::ifstream file(pathToUptime);
        if( !file )
        {
            std::string errorMsg = "can not open: ";
            errorMsg += pathToUptime;
            throw std::runtime_error( errorMsg.c_str() );
        }
        double startTime = 0;
        double idle = 0;
        file >> startTime >> idle;
    
        double difference = startTime - idle;
        double result = difference / startTime;
        int returnvalue = static_cast< int > ( result );
        return returnvalue;
    }
    
    jan@linux ~ $ cat /proc/uptime
    173755.29 624983.59
    


  • 173755.29 >= 624983.59? Wirklich?


  • Mod

    Die erste Zahl ist die wall-clock-time, die das System aktiv war (d.h. die Zeit, die die eingebaute Uhr gemessen hat). Die zweite Zeit ist die CPU-Zeit, die das System inaktiv war. Jetzt rechne dir mal aus, was das wohl auf einem Multiprozessorsystem für Auswirkungen hat.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten