Zeit mit Millisekunden



  • Hallo zusammen,

    ich würde gerne die aktuelle Systemzeit mit Millisekunden auslesen.

    Wenn ich CTime richtig verstehe, dann gibt es dort keine Millisekunden oder?

    Kennt jemand eine Möglichkeit?

    Außerdem hab ich folgendes gefunden:

    Die Funktion GetTickCount() gibt die seit dem Start von Windows vergangene Zeit (in Millisekunden) als 32-Bit-Wert (DWORD) zurück. Die Auflösung beträgt derzeit 10 msec, d. h. der Zähler wird im Abstand von etwa 10 msec vom Betriebssystem um 10 erhöht.

    Gibt es eine Methode die eine Auflösung von 1 ms hat?

    Danke



  • Die höchste Auflösung, die dein System bietet, ist (logischerweise) das Maximum, was du nutzen kannst. (meine Version der MSDN empfielt Multimedia-Timer (timeGetTime()) oder High-Resolution-Timer (QueryPerformanceCounter())



  • QueryPerformanceCounter() habe ich gefunden und mal probeweise in einem kleinem Projekt eingebunden.

    Ich habe dort einen Timer gestartet der jede Sekunde den Wert von QueryPerformance Counter ausgibt.

    LARGE_INTEGER iTime;
    QueryPerformanceCounter(&iTime);
    
    unsigned __int64 iTest = static_cast<__int64>(iTime.QuadPart);
    
    char pBuffer[25];
    _ui64toa_s(iTest, pBuffer, 25, 10);
    TRACE("%s\n", pBuffer);
    

    Die Ergebnisse versteh ich nun aber gar nicht:

    62381862567
    62385441963
    62389021426

    Mach ich was falsch? Hab ich den Satz der MSDN

    The LARGE_INTEGER structure is actually a union. If your compiler has built-in support for 64-bit integers, use the QuadPart member to store the 64-bit integer. Otherwise, use the LowPart and HighPart members to store the 64-bit integer.

    Falsch verstanden? Oder wieso kommen so komische Zahlen raus (ich hätte jetzt erwartet, dass die Differenz gleich ist oder irgendwo die 1 Sekunde wiederzufinden ist.

    Danke schonmal für Antworten!



  • so habe ich das bisher immer gemacht, in der tm struct kann man alles moegliche abfragen, ueber wochentag bis hin zu jahrestag und millisekunden - dann einfach mit den %d pasten und feddich

    struct tm newtime;
    __time64_t long_time;
    
    _time64(&long_time);
    _localtime64_s(&newtime, &long_time);
    
    TCHAR buffer[1024];
    ::SecureZeroMemory(buffer, 1024);
    
    _stprintf_s(buffer, _T("%02d:%02d:%02d"), newtime.tm_hour, newtime.tm_min, newtime.tm_sec);
    


  • Die Differenz der jeweilig benachbarten Werte ist einmal 3579463 und einmal 3579396 . Und ein Wert irgendwo da in der Gegend repräsentiert eben die eine Sekunde.



  • Danke euch allen...

    Ich hab jetzt über die Methode QueryPerformanceFrequency die Frequenz ausgelesen (Querys/s) darüber kann man dann bestimmen wieviele Querys pro Millisekunde berechnet werden und schließlich auch die Millisekunden.



  • GetSystemTime() hättest Du sonst auch nehmen können.


Anmelden zum Antworten