#c #linux
Как взять системное время с точностью до наносекунд? Спасибо
Ответы
Ответ 1
timespec ts; clock_gettime(CLOCK_REALTIME, &ts); где timespec: struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ }; http://linux.die.net/man/3/clock_gettimeОтвет 2
В комментарий к совершенно правильному ответу @Anton Dobkin текст не помещается, пришлось ответом. Вопрос лишь в том, какое именно время в наносекундах мы получаем (как его с пользой интерпретировать). Маленькая программка: #include#include #include #include int main (int ac, char *av[]) { int i, n = av[1]? atoi(av[1]): 10; if (n < 2) n = 10; struct timespec nt[n]; for (i = 0; i < n; i++) clock_gettime(CLOCK_REALTIME,&nt[i]); for (i = 0; i < n; i++) printf ("%ld sec %ld nsec (%ld)\n", (long)(nt[i].tv_sec-nt[i?i-1:i].tv_sec), nt[i].tv_nsec, nt[i].tv_nsec-nt[i?i-1:i].tv_nsec); exit (0); } Можно оттранслировать avp@avp-xub11:~/hashcode$ gcc -O3 nano.c -lrt avp@avp-xub11:~/hashcode$ ./a.out 0 sec 41177457 nsec (0) 0 sec 41183591 nsec (6134) 0 sec 41189306 nsec (5715) 0 sec 41194933 nsec (5627) 0 sec 41200516 nsec (5583) 0 sec 41206296 nsec (5780) 0 sec 41211878 nsec (5582) 0 sec 41217648 nsec (5770) 0 sec 41223324 nsec (5676) 0 sec 41229074 nsec (5750) а потом посмотреть avp@avp-xub11:~/hashcode$ ./a.out 10000 |less и получить богатую пищу для размышлений о том, а что именно мы меряем? Желающие могут заменить CLOCK_REALTIME на CLOCK_THREAD_CPUTIME_ID или CLOCK_PROCESS_CPUTIME_ID и еще больше задуматься. Ответ 3
Например, так: int main(int ac, char *av[]) { int i, n = av[1] ? atoi(av[1]) : 10; if (n < 2) n = 10; struct timespec nt[n]; for (i = 0; i < n; i++) clock_gettime(CLOCK_REALTIME, &nt[i]); for (i = 1; i < n; i++) printf("%ld sec (%ld) | %ld nsec (%ld)\n", (long)(nt[i].tv_sec), (long)(nt[i].tv_sec - nt[i - 1].tv_sec), (long)(nt[i].tv_nsec), (long)(nt[i].tv_nsec - nt[i - 1].tv_nsec) ); exit(0); } Выдача будет: 1525792118 sec (0) | 504833615 nsec (193) 1525792118 sec (0) | 504833657 nsec (42) 1525792118 sec (0) | 504833699 nsec (42) 1525792118 sec (0) | 504833741 nsec (42) 1525792118 sec (0) | 504833784 nsec (43) 1525792118 sec (0) | 504833830 nsec (46) 1525792118 sec (0) | 504833876 nsec (46) 1525792118 sec (0) | 504833920 nsec (44) 1525792118 sec (0) | 504833965 nsec (45)
Комментариев нет:
Отправить комментарий