getitimer と setitimer を使用して単純な操作を実行するのにかかる時間を取得するために、次の C コードを作成しています。
#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include <string.h>
#define INTERVAL 1 /* number of milliseconds to go off */
int main() {
double sum = 0;
struct itimerval initial, updated;
initial.it_value.tv_sec = INTERVAL;
initial.it_value.tv_usec = 999999;
initial.it_interval = initial.it_value;
memcpy(&(initial.it_interval), &(initial.it_value), sizeof( initial.it_value ));
printf("%ld\n", initial.it_value.tv_usec);
if (setitimer(ITIMER_VIRTUAL, &initial, NULL) == -1) {
perror("error calling setitimer()");
exit(1);
}
for (unsigned int i; i < 100; i++)
sum += 1./i;
if (getitimer(ITIMER_REAL, &updated) == -1) {
perror("error calling getitimer()");
exit(1);
}
printf("Time started = %ld\n; Time ended = %ld\n: Time taken = %ld\n",
initial.it_value.tv_usec, updated.it_value.tv_usec,
initial.it_value.tv_usec - updated.it_value.tv_usec);
return 0;
}
私はコンパイルしました:
$ gcc -o timer -std=c99 -Wall -pedantic getitimer.c -lrt -03
ただし、私の答えは常に 999999 です (100 を上げ下げしました)。
./timer
999999
Time started = 999999
; Time endd = 0
: Time taken = 999999
私のエラーは何ですか?また、このようなプログラムを使用して得られる最高の精度はどれくらいですか?
どうもありがとう!