我们平时使用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");
}

 

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-26
  • 2021-06-08
  • 2021-05-19
  • 2022-12-23
  • 2021-11-23
  • 2021-12-03
猜你喜欢
  • 2021-10-07
  • 2021-05-14
  • 2022-03-03
  • 2021-10-12
  • 2022-12-23
  • 2022-01-27
相关资源
相似解决方案