lemon/time_measure.h
changeset 2138 a683f63b54e2
parent 2027 119db4e6ab2c
child 2243 5deb7b22a0ec
equal deleted inserted replaced
15:7ff0c57b97f7 16:cd8d5b2dd740
    23 ///\file
    23 ///\file
    24 ///\brief Tools for measuring cpu usage
    24 ///\brief Tools for measuring cpu usage
    25 
    25 
    26 
    26 
    27 #ifdef WIN32
    27 #ifdef WIN32
    28 
    28 #include <lemon/bits/mingw32_time.h>
    29 #include <windows.h>
       
    30 #include <time.h>
       
    31 #include "dos.h"
       
    32 
       
    33 int gettimeofday(struct timeval * tp, struct timezone *) {
       
    34   SYSTEMTIME      systime;
       
    35 
       
    36   if (tp) {
       
    37 
       
    38     struct tm tmrec;
       
    39     time_t theTime = time(NULL);
       
    40 
       
    41     tmrec = *localtime(&theTime);
       
    42     tp->tv_sec = mktime(&tmrec);
       
    43     GetLocalTime(&systime); /* system time */
       
    44 
       
    45     tp->tv_usec = systime.wMilliseconds * 1000;
       
    46 
       
    47   }
       
    48 
       
    49   return 0;
       
    50 
       
    51 }
       
    52 
       
    53 struct tms {
       
    54   long	tms_utime;
       
    55   long	tms_stime;
       
    56   long	tms_cutime;
       
    57   long	tms_cstime;
       
    58 };
       
    59 
       
    60 static long filetime_to_clock(FILETIME *ft)
       
    61 {
       
    62   __int64 qw = ft->dwHighDateTime;
       
    63   qw <<= 32;
       
    64   qw |= ft->dwLowDateTime;
       
    65   qw /= 10000;  /* File time ticks at 0.1uS, clock at 1mS */
       
    66   return (long) qw;
       
    67 
       
    68 }
       
    69 
       
    70 int times(struct tms *tmbuf)
       
    71 {
       
    72   FILETIME create, exit, kernel, user;
       
    73   if (GetProcessTimes(GetCurrentProcess(),&create, &exit, &kernel, &user)) {
       
    74     tmbuf->tms_utime = filetime_to_clock(&user);
       
    75     tmbuf->tms_stime = filetime_to_clock(&kernel);
       
    76     tmbuf->tms_cutime = 0;
       
    77     tmbuf->tms_cstime = 0;
       
    78   }
       
    79   else {
       
    80     tmbuf->tms_utime = clock();
       
    81     tmbuf->tms_stime = 0;
       
    82     tmbuf->tms_cutime = 0;
       
    83     tmbuf->tms_cstime = 0;
       
    84   }
       
    85   return 0;
       
    86 }
       
    87 
       
    88 #define _SC_CLK_TCK 1
       
    89 
       
    90 int sysconf(int)
       
    91 {
       
    92   return 1;
       
    93 }
       
    94 
       
    95 #else
    29 #else
    96 #include <sys/times.h>
    30 #include <sys/times.h>
    97 #endif
    31 #endif
    98 
    32 
    99 #include <sys/time.h>
    33 #include <sys/time.h>
   139     double real_time;
    73     double real_time;
   140   
    74   
   141     rtms &getTms() {return ts;}
    75     rtms &getTms() {return ts;}
   142     const rtms &getTms() const {return ts;}
    76     const rtms &getTms() const {return ts;}
   143 
    77 
   144     void _reset() 
    78     void _reset() { 
   145     { ts.tms_utime=ts.tms_stime=ts.tms_cutime=ts.tms_cstime=0; real_time=0;}
    79       ts.tms_utime = ts.tms_stime = ts.tms_cutime = ts.tms_cstime = 0; 
       
    80       real_time = 0;
       
    81     }
   146 
    82 
   147   public:
    83   public:
   148 
    84 
   149     ///Read the current time values of the process
    85     ///Read the current time values of the process
   150     void stamp()
    86     void stamp()