我们在程序中,很多次用到sleep()函数,让它睡眠几秒后再执行该进程。今天呢,我要给大家实现一下sleep函数。
看看代码哦:
运行结果:
结果中每隔三秒钟,打印一条语句。实现了sleep(3)的功能。
关于sleep函数,在这里,我们首先让主函数调用了my_sleep函数,my_sleep函数又调用了注册处理函数,注册了一个SIGALRM的信号;然后为其设置闹钟,看主函数中的my_sleep函数要睡眠多长时间,调用pause等待,那么什么时候处理信号呢?此时,在用户态由于接收到的信号将其保存起来,使其处于未决状态,进入内核态处理异常,再回到用户态执行SIGALRM信号处理函数,信号处理函数返回时执行特殊的系统调用再次进入内核,处理完异常回用户态,从中断的吓一条指令开始执行。当捕捉到信号之后pause返回-1,再调用alarm(0)清空闹钟,调用sigaction恢复SIGALRM信号以前的处理动作。
外附一张图哈:(很重要哦)
比较短小,欢迎来访哦~~