added function- timer_expired_micro() for timer expiry in microseconds
Этот коммит содержится в:
родитель
6162535684
Коммит
aa9ca2689b
32
src/timer.c
32
src/timer.c
@ -21,6 +21,31 @@ timer_expired(struct timer *tp)
|
|||||||
return tp->end.tv_sec <= now.tv_sec;
|
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 *
|
struct timer *
|
||||||
new_timer(time_t sec, suseconds_t usec)
|
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));
|
memcpy(&tp->end, &tp->begin, sizeof(struct timer));
|
||||||
tp->end.tv_sec = tp->begin.tv_sec + (time_t) sec;
|
tp->end.tv_sec = tp->begin.tv_sec + (time_t) sec;
|
||||||
tp->end.tv_usec = tp->begin.tv_usec + (time_t) usec;
|
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;
|
return tp;
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user