Я хочу измерить время настенных часов с clock_gettime
, но каждый раз, когда я запускаю свой код, он показывает 0. Почему? (я хочу, чтобы мой результат, чтобы быть в миллисекундах.)clock_gettime всегда показывает 0
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char **argv)
{
struct timespec start, stop;
unsigned long accum;
if(clock_gettime(CLOCK_REALTIME, &start) == -1) {
perror("clock gettime");
exit(EXIT_FAILURE);
}
int i;
for(i=0; i<100000000; i++){int a = 3; int b = 100; int c = a*b;}
//system(argv[1]);
if(clock_gettime(CLOCK_REALTIME, &stop) == -1) {
perror("clock gettime");
exit(EXIT_FAILURE);
}
accum = (unsigned long)((stop.tv_sec - start.tv_sec) * 1000) + (unsigned long)((stop.tv_nsec - start.tv_nsec)/1000000) +0.5;
printf("%lu\n", accum);
return(EXIT_SUCCESS);
}
http://en.wikipedia.org/wiki/Dead_code_elimination - компилятор полностью удаляет ваш цикл. – Mysticial
То, как вы вычисляете 'accum', вы увидите ненулевое значение, только если выполнение занимает не менее 1 секунды. И цикл 'for', скорее всего, оптимизирован. Замените цикл на «scanf», чтобы увеличить задержку. – Inspired
@Mysticial: Хорошо, спасибо! :)) Вопрос о miliseconds: Я хотел бы знать, если 'accum = (unsigned long) ((stop.tv_sec - start.tv_sec) * 1000) + (unsigned long) ((stop. tv_nsec - start.tv_nsec)/1000000) +0,5; 'даст мне миллисекунды? –