我正在编写以下 C 代码来获取使用 getitimer 和 setitimer 执行简单操作所需的时间。
#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
我的错误是什么?另外,我想问一下使用这样的程序可以获得的最高精度是多少?
非常感谢!