Millisekunden messen



  • Hi,

    Ich würde gerne Zeit in Millisekunden messen. Im Standard geht das glaub ich nicht, aber vielleicht könnte man hier mal zu jedem Betriebssystem einige Lösungen aufschreiben und das ganze dann in die FAQ stellen.

    Danke im **Voraus

    PM**



  • (gehört möglicherweise in ein anderes Forum?)

    Die Funktion queryPrecisionTime () liefert beim ersten Aufruf Null und bei jedem weiteren Aufruf die seit dem ersten Aufruf verstrichene Zeit.

    Win32:

    #include <windows.h>
    
    union ut_LargeInteger
      {
      LARGE_INTEGER o_WinPart;
      t_Int64       l_MyPart;
      };
    
    static int i_ResetPrecisionTime;
    static t_Int64 l_PerfFrequ;
    static ut_LargeInteger uo_PerfCount;
    
    long queryPrecisionTime ()
      {
      if (i_ResetPrecisionTime == 0)
        {
        i_ResetPrecisionTime = 1;
        QueryPerformanceFrequency (& uo_PerfCount. o_WinPart);
        l_PerfFrequ = uo_PerfCount. l_MyPart / 1000;
        QueryPerformanceCounter (& uo_PerfCount. o_WinPart);
        }
    
      ut_LargeInteger uo_perfCount;
      QueryPerformanceCounter (& uo_perfCount. o_WinPart);
      return (long) ((uo_perfCount. l_MyPart - uo_PerfCount. l_MyPart) / l_PerfFrequ);
      }
    

    UNIX:

    #include <sys/time.h>
    
    static int i_ResetPrecisionTime;
    static struct timeval so_TimeVal;
    
    //---------------------------------------------------------------------------
    
    long queryPrecisionTime ()
      {
      if (i_ResetPrecisionTime == 0)
        {
        i_ResetPrecisionTime = 1;
        gettimeofday (& so_TimeVal, 0);
        }
    
      struct timeval so_timeVal;
      gettimeofday (& so_timeVal, 0);
      return (so_timeVal. tv_sec  - so_TimeVal. tv_sec ) * 1000 +
             (so_timeVal. tv_usec - so_TimeVal. tv_usec) / 1000;
      }
    

    OS/2:

    #define INCL_DOSDATETIME
    #define INCL_DOSMISC
    #include <os2.h>
    
    static int i_ResetPrecisionTime;
    static ULONG l_Start;
    
    long queryPrecisionTime ()
      {
      if (i_ResetPrecisionTime == 0)
        {
        i_ResetPrecisionTime = 1;
        DosQuerySysInfo (QSV_MS_COUNT, QSV_MS_COUNT, & l_Start, sizeof (l_Start));
        }
    
      ULONG l_stop;
      DosQuerySysInfo (QSV_MS_COUNT, QSV_MS_COUNT, & l_stop, sizeof (l_stop));
      return l_stop - l_Start;
      }
    


  • @Admins

    das ganze würde sich gut in des FAQs machen oder?
    Die Frage habe ich schon ein paar Mal hier gelesen.

    Bye Peter.



  • Ja, würde es sich --- hab aber wenig Zeit, merk ich mir mal vor!

    MfG SideWinder


Anmelden zum Antworten