X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Ftimer.c;h=761ab30e9be86ab1cb7e7f6613769e6263f70529;hb=5a78c3505ae7fa76a061e26676450049ec5946d5;hp=42cc9ebc366ff59b00c6fd1ad67b172e0710a95a;hpb=49ed04e2e93a6a5b01058638224621d5c07db01c;p=libucw.git diff --git a/lib/timer.c b/lib/timer.c index 42cc9ebc..761ab30e 100644 --- a/lib/timer.c +++ b/lib/timer.c @@ -1,7 +1,7 @@ /* - * Sherlock Library -- Execution Timing + * UCW Library -- A Simple Millisecond Timer * - * (c) 1997 Martin Mares + * (c) 2007 Martin Mares * * This software may be freely distributed and used according to the terms * of the GNU Lesser General Public License. @@ -13,34 +13,31 @@ #include #include -static struct timeval last_tv; - -uns -get_timer(void) +timestamp_t +get_timestamp(void) { struct timeval tv; - uns diff; - gettimeofday(&tv, NULL); - if (tv.tv_sec < last_tv.tv_sec - || tv.tv_sec == last_tv.tv_sec && tv.tv_usec < last_tv.tv_usec) - diff = 0; - else - { - if (tv.tv_sec == last_tv.tv_sec) - diff = (tv.tv_usec - last_tv.tv_usec + 500) / 1000; - else - { - diff = 1000 * (tv.tv_sec - last_tv.tv_sec - 1); - diff += (1000500 - last_tv.tv_usec + tv.tv_usec) / 1000; - } - } - last_tv = tv; - return diff; + return (timestamp_t)tv.tv_sec * 1000 + tv.tv_usec / 1000; } void -init_timer(void) +init_timer(timestamp_t *timer) +{ + *timer = get_timestamp(); +} + +uns +get_timer(timestamp_t *timer) +{ + timestamp_t t = *timer; + *timer = get_timestamp(); + return MIN(*timer-t, ~0U); +} + +uns +switch_timer(timestamp_t *old, timestamp_t *new) { - gettimeofday(&last_tv, NULL); + *new = get_timestamp(); + return MIN(*new-*old, ~0U); }