泰和县建设局网站,网站扁平化设计理念,浙江新东阳建设集团有限公司网站,wordpress 转载文章alarm函数 设置定时器(闹钟)。在指定seconds后#xff0c;内核会给当前进程发送14#xff09;SIGALRM信号。进程收到该信号#xff0c;默认动作终止。 每个进程都有且只有唯一个定时器。 unsigned int alarm(unsigned int seconds); 返回0或剩余的秒数#xff0c;无失败… alarm函数 设置定时器(闹钟)。在指定seconds后内核会给当前进程发送14SIGALRM信号。进程收到该信号默认动作终止。 每个进程都有且只有唯一个定时器。 unsigned int alarm(unsigned int seconds); 返回0或剩余的秒数无失败。 常用取消定时器alarm(0)返回旧闹钟余下秒数。 例alarm(5) → 3sec → alarm(4) → 5sec → alarm(5) → alarm(0) 定时与进程状态无关(自然定时法)就绪、运行、挂起(阻塞、暂停)、终止、僵尸...无论进程处于何种状态alarm都计时。 练习编写程序测试你使用的计算机1秒钟能数多少个数。 【alarm .c】 使用time命令查看程序执行的时间。 程序运行的瓶颈在于IO优化程序首选优化IO。 实际执行时间 系统时间 用户时间 等待时间 /***
alarm.c
***/
#includestdio.h
#includeunistd.hint main()
{int i;alarm(1);for(i 0; ; i){printf(%d\n,i);}return 0;
} /***
my_alarm.c
***/
#includestdio.h
#includesys/time.h
#includestdlib.h
#includeunistd.h/*
struct itimerval{struct timeval{it_value.tv_sec;it_value.tv_usec;}it_interval;struct timerval{it_value.tv_sec;it_value.tv_usec;}it_value;
}it,oldit;*/
unsigned int my_alarm(unsigned int sec)
{struct itimerval it,oldit;int ret;it.it_value.tv_sec sec;it.it_value.tv_usec sec;it.it_interval.tv_sec sec;it.it_interval.tv_usec sec;ret setitimer(ITIMER_REAL,it,oldit);if(-1 ret){perror(setitimer);exit(1);}return oldit.it_value.tv_sec;}int main()
{int i;my_alarm(1);for(i 0; ; i){printf(i %d\n,i);}return 0;
} setitimer函数 设置定时器(闹钟)。 可代替alarm函数。精度微秒us可以实现周期定时。 int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value); 成功0失败-1设置errno 参数which指定定时方式 ① 自然定时ITIMER_REAL → 14SIGLARM 计算自然时间 ② 虚拟空间计时(用户空间)ITIMER_VIRTUAL → 26SIGVTALRM 只计算进程占用cpu的时间 ③ 运行时计时(用户内核)ITIMER_PROF → 27SIGPROF 计算占用cpu及执行系统调用的时间 练习: 使用setitimer函数实现alarm函数重复计算机1秒数数程序。 【setitimer.c】 拓展练习结合man page编写程序测试it_interval、it_value这两个参数的作用。 【setitimer1.c】 提示 it_interval用来设定两次定时任务之间间隔的时间。 it_value定时的时长 两个参数都设置为0即清0操作。 raise和abort函数 raise 函数给当前进程发送指定信号(自己给自己发) raise(signo) kill(getpid(), signo); int raise(int sig); 成功0失败非0值 abort 函数给自己发送异常终止信号 6) SIGABRT 信号终止并产生core文件 void abort(void); 该函数无返回 转载于:https://www.cnblogs.com/wanghao-boke/p/11332617.html