先来说说工作原理,linux中的sleep函数能够让程序休眠一定的秒数,到时间后自动恢复运行。
实现思路
设定睡眠的秒数
睡眠(挂起)
恢复运行
实现机制
设定睡眠的秒数:采用alarm()函数设定需要睡眠的秒数,到时间后闹钟会发送SIGALRM信号给当前进程。但SIGALRM信号的默认操作是杀死进程,所以我们需要对SIGALRM信号进行自定义处理。
睡眠:pause()函数会让当前进程挂起,直到收到信号才会出错返回。
示例程序代码:模拟实现sleep使当前进程每2秒打印”hello yingyingn”
#include #include #include void handler(int signo)//由于程序在睡眠期间什么也不做所以自定义处理函数不执行任何操作 { } int mysleep(int time) { sigset_t set; sigemptyset(&set); struct sigaction act; struct sigaction oact; act.sa_handler = handler;//自定义处理函数 act.sa_mask = set; act.sa_flags = 0; sigaction(SIGALRM,&act,&oact);//捕捉闹钟信号自定义处理动作 alarm(time);//time秒后给进程发送信号 pause();//挂起进程 int _time = alarm(0);//如果程序被提前唤醒取消闹钟 sigaction(SIGALRM,&oact,NULL);//恢复捕捉信号的原始状态 return _time; } int main() { while(1) { printf("hello yingyingn"); mysleep(2); } return 0; }