我们平时使用sleep(s)的时候,当前线程会休眠一段时间。这个休眠跟我们平时使用的while,for等循环语句不同,因为使用循环的时候cpu还是被这个线程占用着。
到网上查了下原理,大概是这样来实现的。
void sleep(unsignedint s){ //void (*signal(int signum,void(* handler)(int)))(int); //设置信号SIGALRM,如果内核发出这个信号,则调用wakeup函数 signal(SIGALRM, wakeup); //alarm(unsignedint s)是一个定时器函数,通知内核10s后发出SIGALRM信号 alarm(10); } void wakeup(){ printf("Alarm wakeup\n"); }