Linux编程itimerval计时器结构体问题
楼主的程序没有用 signal 注册 SIGPROC 对应函数,在 for 循环的时候可能已经发生了多次中断和重置计时器。至于比1秒大,手册中有解释 Timers will never expire before the requested time, but may expire some (short) time afterward, which depends on the system timer resolution and on the system load; see time(7).
要在1秒间隔调用一个函数,需要加上 signal,比如
#include <signal.h>
#include <sys/time.h>
#include <stdio.h>
#include <time.h>
static struct itimerval a;
void timeover( int event )
{
struct itimerval b;
printf( "timeover at %ld\n", time(NULL) );
getitimer( ITIMER_PROF, &b );
printf( "sec = %ld, usec = %ld\n", b.it_value.tv_sec, b.it_value.tv_usec );
}
int main()
{
signal( SIGPROF, timeover );
printf( "begin at %ld\n", time(NULL) );
a.it_interval.tv_sec = 1;
a.it_interval.tv_usec = 0;
a.it_value.tv_sec = 1;
a.it_value.tv_usec = 0;
setitimer( ITIMER_PROF, &a, NULL );
while(1);
return 0;
}
我还想问下关于 ITIMER_PROF 和 ITIMER_VIRTUAL的问题。
根据我的理解,PROF是总CPU时间,VIRTUAL是USER时间,PROF-VIRTUAL是内核时间。
那么如果我做像fibonacci这种递归计算,是不是内核时间应该很少?因为中间没有用system call。
不知道我的理解对不对。
多谢回答。
首先说明本人没有试过,下面的说法只是个人理解。
VIRTUAL 只是进程时间,如果进程被系统调度挂起或没有获得时间片则不计入其中
PROF 时间包含 VIRTUAL 时间,此外还包括了系统执行这一进程的相关时间。按个人理解这些额外的时间至少应该包括系统加载程序及相关动态链接时间、和系统调度任务所用时间
REAL 时间是真正的外部时间,不因 CPU 性能和系统调度而改变的绝对时间。
我想 PROC 一定大于 VIRTUAL 时间,但系统调用时间应该两者之中都有包含。递归计算对于两者的差别应该不大。个人见解,请指正
广告 您可能关注的内容 |