/*
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
-功能:设置定时闹钟,函数调用的时候开始计时,当倒计时为 0 的时候。
函数会给当前的进程发送一个信号 SIGALARM
-参数:second 倒计时时长,单位:秒。如果参数为 0 ,则计时器无效(不进行倒计时,不发送信号)
取消一个计时器可以通过将参数设置为 0 alarm(0)
-返回值:
-0 之前没有定时器
-之前有定时器,返回之前的定时器剩余的时间
alarm(10);->返回 0
sleep(1);
alarm(5);->返回 9
alarm(100);默认是不阻塞的
SIGALARM 默认终止当前的进程,每一个进程都有且只有一个唯一的定时器
以最后一个次调用 alarm 为准,之前的都会失效。
*/
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(void){
int seconds = alarm(5);//0
printf("seconds = %d\n",seconds);
sleep(2);
seconds = alarm(10);//3 新开一个就是重新开始计时
printf("seconds = %d\n",seconds);//由于 alarm 不阻塞,所以会是立刻打印
while (1)
{
/* code */
}
}
//测试电脑一秒以内能够数多少个数字
#include<unistd.h>
#include<stdio.h>
int main(void){
alarm(1);
int i = 0;
while (1)
{
printf("i = %d.\n",i++);
}
return 0;
}
实际运行的感觉是程序执行了好多秒,因为向终端输出的过程中,涉及到大量的 I/O 操作需要时间。
可以将终端的输出重定向到一个文件当中。
a.txt 荣升成为大型的文件
猜测减少输出的字符个数只会更大,果然如此。
程序运行的时间 = 内核时间(系统调用 )+ 用户时间(用户自身的代码 ) + 其他消耗的时间(I/O 操作)
进行文件的 I/O 操作比较浪费时间。
以及内核和用户的切换也耗费时间。
定时器和进程的状态无关,属于自然时间。
无论程序处于什么状态, alarm()都会计时。