Zwei Uhren laufen asynchron



  • Hallo! Ich habe im Rahmen eines Online-Counters eine Funktion geschrieben, in der zwei Uhren dargestellt werden - ein Countdown, und eine Uhr, die einfach nur hochzählt (beide stehen unten in der for-Schleife). Anfangs laufen beide Uhren noch synchron zueinander, aber schon nach ca. 2 Minuten laufen sie asynchron - es entsteht bis zum Ende des Countdowns eine Differenz von mehreren Sekunden.
    Kann mir jemand sagen, ob ich einen Fehler gemacht habe?
    Für die Uhren habe ich <ctime> includet und die tm-Struktur benutzt.
    Alles andere s.u.:

    void StatistikAusgabe(time_t startZeit)
    {
        const unsigned int tenMinutesMs = 600000;
        const unsigned int tenMinutesS = 600;
        const unsigned int oneSecondMs = 1000;
        const unsigned int oneSecondS = 1;
        const unsigned int timeArrayLength = 9;
    
        unsigned int intTage;
    
        time_t fixZeit;
        time_t aktZeit;
        time_t ausgabeZeit;
        time_t pingZeit = tenMinutesS;
    
        char onlineZeit[timeArrayLength];
        char pingCountdown[timeArrayLength];
    
        tm timebufferT;
        tm *timebufferP = & timebufferT;
    
        for (fixZeit = aktZeit = time(NULL) ; fixZeit > aktZeit - tenMinutesS ; aktZeit = time(NULL))
        {               
            ausgabeZeit = aktZeit - startZeit;          
    
            timebufferP = gmtime(& ausgabeZeit);
            strftime(onlineZeit, timeArrayLength, "%H:%M:%S", timebufferP);
    
            timebufferP = gmtime(& pingZeit);
            strftime(pingCountdown, timeArrayLength, "%H:%M:%S", timebufferP);          
    
            pingZeit -= oneSecondS;
    
            clrscr();
    
            cout << endl << endl
                   << "Online seit        : " << onlineZeit <<endl << endl
                   << "N" << char(132) << "chster Ping in   : " << pingCountdown << endl;
    
            Sleep(oneSecondMs);
        }
    }
    


  • hab's mir nicht genau angesehen, aber es sieht so aus, als ob du mit:
    pingZeit -= oneSecondS;
    die zeit um eine sekunde änderst weil du danach mit
    Sleep(oneSecondMs);
    eine sekunde wartest, dazu kommt aber noch die zeit, die dein programm verbraucht für den durchlauf der schleife....

    rapso->greets();

    ps. vielleicht sehe ich es hier falsch.. is nur n 2cent tip 🙂



  • Danke, rapso! Du hattest recht - ich gleiche jetzt im Programm zwischendurch die Zeit aus, die sonst in der Schleife verloren geht.
    Das sind immer mal ein paar Tausendstel, die nach und nach zur Sekunde werden!

    Gruß, Kotty


Anmelden zum Antworten