Простой снипет на сях для подсчета секунд между двумя замерами:
Как мы помним, структура 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