Stoppuhr



  • 😕 😕 PUSH 😕 😕



  • Ich hab Dein Problem immer noch nicht ganz verstanden... was willst Du eigentlich genau machen? Eine (kurze) Zeit messen? Dann verwende QueryPerformanceCounter; das ist das genaueste was Windows bieten kann.



  • Ich benutze zum berechnen einer Dauer GetTickCount()

    #include <windows.h>
    int main()
    {int start, stop;
    start=GetTickCount();
        printf ("Start: %d",start);
        printf("\n");
    //Hier werden die zu testenden Aufgaben durchgeführt
    
    stop=GetTickCount();
        printf ("Stop: %d\n",stop);
    
        printf ("Dauer der operation\? : %d\n",stop-start);
        system("PAUSE");
        return(0);
    }
    

    Remarks:
    The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if Windows is run continuously for 49.7 days.
    Windows NT: To obtain the time elapsed since the computer was started, look up the System Up Time counter in the performance data in the registry key HKEY_PERFORMANCE_DATA. The value returned is an 8 byte value.



  • Wieso printf ??

    printf ist doch aus C und nicht aus Cpp oder??

    Mfg



  • 'printf' dient zur Ausgabe in einer DOS-Box! 😃



  • schnurres schrieb:

    Ich versuche mir eine Stoppuhr zu programmieren,die jede Sekunde eine Sekunde weiter zählt.Wenn 60´Sekunden erreicht sind soll sie auf eine minute weiterspringen und wenn 60 minuten erreicht sind soll sie auf eine stunde springen,aber die Sekunden und minuten sollen immernoch mitaufen

    Da brauchste sogar gar nicht die WinAPI für:

    #include <iostream>
    #include <iomanip>
    #include <ctime>
    
    int main() {
        using namespace std;
        {
            bool start;
            cout << "0 - Beenden\n1 - Stoppuhr starten" << endl;
            cin >> start;
            if(!start) {
                return 0;
            }
        }
        cout << endl;
        clock_t start = clock();
        while(true) {
            int seconds = (clock() - start) / CLOCKS_PER_SEC;
            cout << "\r" << setw(2) << seconds / 60 << "min " << setw(2) << seconds % 60 << "s" << flush;
        }
        return 0;
    }
    

    Das mit den Stunden hab ich noch nicht eingebaut, aber das sollte kein Problem sein.

    mfg.



  • Aus Zeiten von Endlosschleifen die 100% CPU benötigen, sollten wir eigentlich entwachsen sein...



  • Jochen Kalmbach schrieb:

    Aus Zeiten von Endlosschleifen die 100% CPU benötigen, sollten wir eigentlich entwachsen sein...

    gut, dann schreib mal die lösung die das mit der standardbibliothek erledigt.

    da kann man dann halt einfach ein Sleep(1); in die Schleife packen, aber das wäre dann wieder winapi.

    mfg.



  • OT: Soll ich nach "C++" verschieben !? Das Forum heisst WinAPI, oder?



  • Jochen Kalmbach schrieb:

    OT: Soll ich nach "C++" verschieben !? Das Forum heisst WinAPI, oder?

    Stimmt, hast Recht, war blöd von mir.

    So sieht das ganze dann ohne 100% aus (und mit den Stunden):

    #include <iostream>
    #include <iomanip>
    #include <ctime>
    #include <windows.h>
    
    int main() {
        using namespace std;
        {
            bool start;
            cout << "0 - Beenden\n1 - Stoppuhr starten" << endl;
            cin >> start;
            if(!start) {
                return 0;
            }
        }
        cout << endl;
        clock_t start = clock();
        while(true) {
            int seconds = (clock() - start) / CLOCKS_PER_SEC;
            int minutes = seconds / 60;
            cout << "\r" << setw(2) << minutes / 60 << "h "
                 << setw(2) << minutes % 60 << "min "
                 << setw(2) << seconds % 60 << "s" << flush;
            Sleep(1);
        }
        return 0;
    }
    

    Eleganter wär's natürlich mit einem Timer, aber so verbraucht's auch so gut wie nichts.

    mfg.


Anmelden zum Antworten