00001 #include "bctimer.h" 00002 #include <sys/time.h> 00003 #include <sys/types.h> 00004 #include <unistd.h> 00005 00006 Timer::Timer() 00007 { 00008 update(); 00009 } 00010 00011 Timer::~Timer() 00012 { 00013 } 00014 00015 int Timer::update() 00016 { 00017 gettimeofday(¤t_time, 0); 00018 return 0; 00019 } 00020 00021 int64_t Timer::get_difference(struct timeval *result) 00022 { 00023 gettimeofday(&new_time, 0); 00024 00025 result->tv_usec = new_time.tv_usec - current_time.tv_usec; 00026 result->tv_sec = new_time.tv_sec - current_time.tv_sec; 00027 if(result->tv_usec < 0) 00028 { 00029 result->tv_usec += 1000000; 00030 result->tv_sec--; 00031 } 00032 00033 return (int64_t)result->tv_sec * 1000 + (int64_t)result->tv_usec / 1000; 00034 } 00035 00036 int64_t Timer::get_difference() 00037 { 00038 gettimeofday(&new_time, 0); 00039 00040 new_time.tv_usec -= current_time.tv_usec; 00041 new_time.tv_sec -= current_time.tv_sec; 00042 if(new_time.tv_usec < 0) 00043 { 00044 new_time.tv_usec += 1000000; 00045 new_time.tv_sec--; 00046 } 00047 00048 return (int64_t)new_time.tv_sec * 1000 + 00049 (int64_t)new_time.tv_usec / 1000; 00050 } 00051 00052 int64_t Timer::get_scaled_difference(long denominator) 00053 { 00054 get_difference(&new_time); 00055 return (int64_t)new_time.tv_sec * denominator + 00056 (int64_t)((double)new_time.tv_usec / 1000000 * denominator); 00057 } 00058 00059 int Timer::delay(long milliseconds) 00060 { 00061 struct timeval delay_duration; 00062 delay_duration.tv_sec = 0; 00063 delay_duration.tv_usec = milliseconds * 1000; 00064 select(0, NULL, NULL, NULL, &delay_duration); 00065 return 0; 00066 }
1.5.5