00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef IXE_Timer_H
00010 #define IXE_Timer_H
00011
00012 #ifdef _WIN32
00013 # include <winsock2.h>
00014 # include "win32/timecnv.h"
00015 #else
00016 # include <sys/time.h>
00017 #endif
00018 #include <cstdio>
00019
00020 namespace IXE {
00021
00022 class Timer {
00023
00024 public:
00025 Timer() { start(); }
00026
00027 void start() { time_now(&l0); }
00028
00029 void stop() { time_now(&l1); }
00030
00031 void duration(char* buf, size_t bufSize) {
00032 long sec = l1.tv_sec - l0.tv_sec;
00033 long usec = l1.tv_usec - l0.tv_usec;
00034 if (usec < 0) {
00035 sec--;
00036 usec += 1000000;
00037 }
00038 if (sec > 60)
00039 snprintf(buf, bufSize, "%ld' %ld.%03ld sec", sec/60, sec%60, usec/1000);
00040 else if (sec > 0)
00041 snprintf(buf, bufSize, "%ld.%03ld sec", sec, usec/1000);
00042 else
00043 snprintf(buf, bufSize, "%ld.%03ld msec", usec/1000, usec%1000);
00044 }
00045
00046 struct timeval l0, l1;
00047 };
00048
00049 }
00050
00051 #endif // IXE_Timer_H