Используй gettimeofday()
Пример:
unsigned GetMicroseconds()
{
struct timeval tv;
::gettimeofday( &tv, 0 );
typedef unsigned long long TimeValue;
TimeValue cur = TimeValue(tv.tv_sec) * TimeValue(1000000) + TimeValue(tv.tv_usec);
return unsigned(cur);
}
Есть одна неприятность - если в системе перевести время, текущее значение в gettimeofday тоже изменится.
Теоретически лучше всего подходит функция clock_gettime c идентификатором CLOCK_MONOTONIC. Но ее почему то убрали из glibc :x