From aa9ca2689b96a56766c5229a1404b1a685ea1d71 Mon Sep 17 00:00:00 2001 From: kaustubhprabhu Date: Tue, 23 Jun 2009 00:07:36 +0000 Subject: [PATCH] added function- timer_expired_micro() for timer expiry in microseconds --- src/timer.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/timer.c b/src/timer.c index b70ef69..e6aa6dc 100644 --- a/src/timer.c +++ b/src/timer.c @@ -21,6 +21,31 @@ timer_expired(struct timer *tp) return tp->end.tv_sec <= now.tv_sec; } +int +timer_expired_micro(struct timer *tp) +{ + + struct timeval now; + int64_t diff= 0, current= 0; + if(gettimeofday(&now, NULL) < 0) { + perror("gettimeofday"); + return -1; + } + + diff+= tp->end.tv_sec * 1000000 ; + diff+= tp->end.tv_usec; + + current+= now.tv_sec * 1000000 ; + current+= now.tv_usec; + + return diff <= current; + + + // currently using microsecond limit. Else we need to introduce timespec instread of timeval +} + + + struct timer * new_timer(time_t sec, suseconds_t usec) { @@ -35,8 +60,11 @@ new_timer(time_t sec, suseconds_t usec) memcpy(&tp->end, &tp->begin, sizeof(struct timer)); tp->end.tv_sec = tp->begin.tv_sec + (time_t) sec; tp->end.tv_usec = tp->begin.tv_usec + (time_t) usec; - - tp->expired = timer_expired; + + if( sec != 0) + tp->expired = timer_expired; + else + tp->expired = timer_expired_micro; return tp; }