«

»

Mar 30

pure c – как измерить время

Простой снипет на сях для подсчета секунд между двумя замерами:

Как мы помним, структура timeval имеет вот такой простецкий вид:

typedef struct timeval {
  long tv_sec;
  long tv_usec;
} timeval;

а потому в коде добавляем такие строчки:

    struct timezone       tz;
    struct timeval        start_period;
    struct timeval        end_period;
    long MY_TIMEOUT_IN_SECONDS = 60; 

    gettimeofday(&start_period,&tz);

    /* some hard work here */

    gettimeofday(&end_period,&tz);

    if ( (end_period.tv_sec - start_period.tv_sec) >= MY_TIMEOUT_IN_SECONDS )
    {
         /* some reaction */
    }

В случае необходимости большей точности имеет смысл учитывать также значение tv_usec из структуры timeval.

Ссылки для развития кругозора:
1. Полезнейшие но не особо известные утилиты из sys/time.h (timeradd,timersub,timercmp,…):
http://linux.die.net/man/3/timercmp
2. Полезнейшие но не особо известные утилиты из ctime.h (clock,difftime,asctime,…):
http://www.cplusplus.com/reference/clibrary/ctime/
3. плюсовый путь – чревато добавлением новой зависимости:
http://www.boost.org/doc/libs/1_42_0/doc/html/date_time.html
4. брутальный путь – через регистры для высокой точности (там же снипеты есть)
http://en.wikipedia.org/wiki/Rdtsc

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>