time() und clock Implementierung in Windows



  • Es geht um folgende "C Standard Library" Funktionen:

    #include time.h
    clock_t clock(void);
    time_t time(time_t* tp);
    

    Ich habe nach langer recherche nicht herausfinden können wie die genaue Implementierung unter Windows aussieht.

    Die Windows Api bietet ähnliche Funktionen:

    GetSystemTime
    QueryPerformanceCounter
    

    Nun verstehe ich nicht ganz, ob

    clock()
    

    die Funktion

    GetSystemTime()
    

    aufruft und

    time()
    

    die Funktion

    QueryPerformanceCounter()
    

    .

    Was passiert wenn ich die time() Funktion in meinem Programm unter Windows aufrufe?

    Vielen Dank!



  • timeh schrieb:

    Nun verstehe ich nicht ganz, ob

    clock()
    

    die Funktion

    GetSystemTime()
    

    aufruft und

    time()
    

    die Funktion

    QueryPerformanceCounter()
    

    .

    Wenn überhaupt, dann eher umgekehrt. Aber ich würde schon vermuten, daß die time.h Funktionen mit Hilfe der WinAPI umgesetzt werden.



  • Bei mir macht:

    time_t t = time(0);
    

    das:

    [cpp]

    __time64_t __cdecl _time64 (
    __time64_t *timeptr
    )
    {
    __time64_t tim;
    FT nt_time;

    GetSystemTimeAsFileTime( &(nt_time.ft_struct) );

    tim = (__time64_t)((nt_time.ft_scalar - EPOCH_BIAS) / 10000000i64);

    if (timeptr)
    *timeptr = tim; /* store time if requested */

    return tim;
    }

    [/cpp]



  • Vielen Dank für die Hilfe.

    Ist es möglich das ganze zu präzisieren?

    Wir können also sagen das time() unter Windows dann die Funktion GetSystemTimeAsFileTime() (statt GetSystemTime() wie gedacht) aufruft. Wo sind die Source Codes?



  • timeh schrieb:

    Vielen Dank für die Hilfe.

    Ist es möglich das ganze zu präzisieren?

    Wir können also sagen das time() unter Windows dann die Funktion GetSystemTimeAsFileTime() (statt GetSystemTime() wie gedacht) aufruft. Wo sind die Source Codes?

    Nein, das kann man so pauschal nicht sagen. Es kommt ganz darauf an, welchen Compiler und welche Library du benutzt.



  • /rant/ schrieb:

    Es kommt ganz darauf an, welchen Compiler und welche Library du benutzt.

    Das ist richtig. Die von mir gepostete Funktion wird von VisualC++ 2005 verwendet.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum C (C89 und C99) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    timeh schrieb:

    Wo sind die Source Codes?

    Es wird GetSystemTimeAsFileTime verwendet siehe:
    C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\time.c
    C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\time64.c



  • Ich habe eben Visual Studio C++ 2010 Express installiert und die CRT Sourcen zu begutachten. Danke Sehr!


Anmelden zum Antworten