Problem: Auslastung



  • Hallo liebe Community.

    Arbeite in letzter Zeit an einem Programm, was lediglich die Verfügbarkeit eines oder mehrer Server abfragen soll. Damit man es auch nebenbei laufen lassen kann, soll die Auslastung natürlich so gering wie möglich sein. Während der Pings zeigt der Taskmanager 00 an, jedoch bei meiner "Warten-Anzeige" steigt die Auslastung auf ca. 12-13%, was nicht so toll ist, da diese Anzeige ja eigentlich nciht wirklich was macht. Vielleicht hat irgendwer ja eine Idee, warum gerade diese Funktion die Auslastung nach oben treibt. Eventuell liegt es auch an der Countdownschleife ich bin mir nicht ganz sicher.

    Die Anzeige.

    void vWait()
    {
        static int i = 0;
    
        switch( i )
        {
            case 0: cout << "                      ";
                    break;
            case 1: cout << "\rWarte auf Ping        ";
                    break;
            case 2: cout << "\rWarte auf Ping .      ";
                    break;
            case 3: cout << "\rWarte auf Ping . .    ";
                    break;
            case 4: cout << "\rWarte auf Ping . . .  ";
                    i = 0;
                    break;
    
        }
            i++;
    }
    

    Der Einsatz der Funktion und die Countdownschleife.

    do
            {
                n += tc; // Zeit wird zu n hinzuaddiert, damit der Zähler vom Neuen beginnt.
    
            cout << endl;
    
            for( n; n > -1; n-- ) // Zähler-Schleife
            {
            // Taste zum Abbrechen
                if( kbhit() )
                    {
                        cancel = true;
                        break;
                    }
    
                vWait();
                cout << "(" << n << ")          " << "\r"; // Leerzeichen, um unschönen Bug zu beheben..
                wait (1);
            }
    
            cout << endl;
            cout << endl;
    

    Danke im Voraus 🙂



  • es liegt an den beiden (bzw allen 3) schleifen.
    du könntest überall ein Sleep(wert_in_ms) einbauen.
    das du damit systemabhängig wirst, sollte nich so das problem sein - bist du ja mit _kbhit eh schon...
    aber für paar zeilen mehr kann man auch eine portable version nehmen:

    /* sleep.h */
    
    namespace sys
    {
    	void sleep(unsigned int milliseconds);
    }
    
    #if defined(_WIN32) || defined(_WIN64)
    # include "win/sleep.impl"
    #elif defined(xyz)
    # include "xyz/sleep.impl"
    #else
    # error not implemented at this platform
    #endif
    
    /* win/sleep.impl */
    
    #define NOMINMAX
    #include "windows.h"
    #undef NOMINMAX
    #undef IN
    #undef OUT
    /* andere böse makros verwerfen */
    
    void sys::sleep(unsigned int milliseconds)
    {
    	::Sleep(milliseconds);
    }
    
    /* main.cpp */
    #include <iostream>
    #include "sleep.h"
    
    int main()
    {
    	unsigned int ms;
    	std::cin >> ms;
    	sys::sleep(ms);
    }
    

    sys ist vrmtl nicht der optimale namespace-name - aber daran wirds denke ich nicht scheitern 😉
    ich würd ihn aber nicht nehmen, weil sys so klingt, als ob es unter irgend nem system auch mal nen makro sein könnte...
    oder schon anderweitig belegt. wollt erst "system" - aber der geht unter windows ja leider nicht - winapi 4tw^^

    bb



  • danke erstmal für die antwort, werde den ansatz nachher, wenn ich wieder zuhause bin mal ausprobieren.


Anmelden zum Antworten