неправильные числа с часами _gettime и CLOCK _PROCESS _CPUTIME _ID

Я использую 64-битную систему Ubuntu 12.04 и пробовал следующий код:

#include <unistd.h>
#include <time.h>
#include <stdio.h>


int
main(void)
{
  struct timespec user1,user2;
  struct timespec sys1,sys2;
  double user_elapsed;
  double sys_elapsed;

  clock_gettime(CLOCK_REALTIME, &user1);
  clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &sys1);
  sleep(10);
  clock_gettime(CLOCK_REALTIME, &user2);
  clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &sys2);
  user_elapsed = user2.tv_sec + user2.tv_nsec/1E9;
  user_elapsed -= user1.tv_sec + user1.tv_nsec/1E9;
  printf("CLOCK_REALTIME: %f\n", user_elapsed);
  sys_elapsed = sys2.tv_sec + sys2.tv_nsec/1E9;
  sys_elapsed -= sys1.tv_sec + sys1.tv_nsec/1E9;
  printf("CLOCK_PROCESS_CPUTIME_ID: %f\n", sys_elapsed);
}

Насколько я понимаю, это должно напечатать что-то вроде

CLOCK_REALTIME: 10.000117
CLOCK_PROCESS_CPUTIME_ID: 10.001

Но в моем случае я получаю

CLOCK_REALTIME: 10.000117
CLOCK_PROCESS_CPUTIME_ID: 0.000032

Это правильное поведение? Если да, то как я могу определить фактические секунды sys1 и sys2?

Когда я изменяю CLOCK _PROCESS _CPUTIME _ID на CLOCK _REALTIME, я получаю ожидаемый результат, но это не то, что мне нужно, потому что нам нужна точность.

[EDIT] Очевидно ЧАСЫ _ПРОЦЕСС _CPUTIME _ID возвращает фактическое время, затраченное процессором на обработку. CLOCK _MONOTONIC, похоже, возвращает правильное значение. Но с какой точностью?

5
задан underdoeg 10 August 2012 в 12:01
поделиться