Suche Funktion um die Zeit in Ticks anzuzeigen



  • Hallo,

    in VB gibt es eine Funktion um die Zeit in Ticks anzuzeigen:

    Dim OldTicks As Long = Now.Ticks
    

    jetzt brauche ich so etwas für Borland C++

    wenn ich Große Ticks Werte in eine Variable speicher, dann meckert Borland rum mit

    "2147760000" ist kein gültiger integer Wert, wie kann ich große Zahlen in eine Variable speichern?



  • Die Zeit in Tick kann mit den WinApi Funktionen GetTickCount und GetTickCount64 ausgelesen werden.

    GetTickCount     Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days.
    GetTickCount64     Retrieves the number of milliseconds that have elapsed since the system was started.
    

    Die Ticks werden als DWORD (32 bit) bzw ULONGLONG (64 bit) zurückgegeben.

    Große Zahlen müssen auch in entsprechend großen Variablen abgelegt werden. Bei Borland ist das größte, also 64 bit, __int64.

    Ich hoffe dies hilft dir weiter.
    MfG Stephan



  • Danke dir, __int64 hat geklappt. Hast du vieleicht noch ein Beispiel zu GetTickCount64 ?



  • bruce85 schrieb:

    Hast du vieleicht noch ein Beispiel zu GetTickCount64 ?

    Nicht wirklich.
    Allerdings laut MSDN http://msdn.microsoft.com/en-us/library/ms724411(v=VS.85).aspx hat die Funktion keine Parameter und gibt die Ticks als ULONGLONG also __int64 zurück.

    Folgendes sollte funktionieren:

    __int64 iTicks = GetTickCount64();
    


  • Wäre ULONGLONG nicht unsigned __int64?



  • Joe_M. schrieb:

    Wäre ULONGLONG nicht unsigned __int64?

    Du hats natürlich recht, daß unsigned __int64 die korrektere Variante ist 😉
    Allerdings sehe ich hier, ob signed oder unsigned, keinerlei Probeme, da GetTickCount() in einer unsigned 32 bit Variable 49,7 Tage speichern kann.
    Was ich damit sagen will, daß ein Überlauf im Normalfall sehr unwarscheinlich ist.



  • Danke dür eure Antworten, aber GetTickCount64(); kann nicht gefunden werden:

    [C++ Fehler] Unit1.cpp(77): E2268 Aufruf der undefinierten Funktion 'GetTickCount64'
    

    muss ich noch irgendeine Header Datei mit einbinden?



  • Dafür braucht man winbase.h. Die Funktion gibt es auch erst seit Vista.



  • Wie Braunstein sagt:

    #if (_WIN32_WINNT >= 0x0600)
    
    WINBASEAPI
    ULONGLONG
    WINAPI
    GetTickCount64(
        VOID
        );
    
    #endif
    


  • Ich bekomme es einfach nicht zum laufen, meine winbase.h scheint wohl veraltet zu sein.

    Gibt es keine andere Möglichkeit an die Ticks zu kommen. Das Programm soll ja auf allen Windows Systeme laufen.



  • Hallo

    Wie schon erwähnt, ist GetTickCount64 erst ab Windows Vista verfügbar. Das läßt sich nicht ändern. Wenn du Vista nicht hast und/oder für alle Windows-Systeme offen bleiben willst, dann verwende GetTickCount (ohne 64). Für deine Zwecke dürfte die Einschränkung von 32-int nicht relevant sein.

    bis bald
    akari



  • Ja aber GetTickCount Zeigt mir ja nur an, wie lange das System online ist. Wie aber komme ich an die Ticks der normalen Uhrzeit?


Anmelden zum Antworten