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