sleep usleep nanosleep alarm setitimer使用

sleep使用的是alarm之类的定时器,定时器是使得进程被挂起,使进程处于就绪的状态。

signal+alarm定时器

alarm参数的类型为uint, 并且不能填0

#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <signal.h>

void sigalrm_fn(int sig)    
   
 {  
     printf("alarm!
");  
     alarm(0.1);  
     return;  
 }  
   
int main(void)  
   
 {  
     signal(SIGALRM, sigalrm_fn);  //后面的函数必须是带int参数的
     alarm(1);  
     while(1);
     pause();  
   
}  

比alarm精度更高的定时器

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>

void test_func()
{
     static count = 0;
 
     printf("count is %d
", count++);
 }
 
 void init_sigaction()
 {
     struct sigaction act;         
    act.sa_handler = test_func; //设置处理信号的函数
     act.sa_flags  = 0;
 
     sigemptyset(&act.sa_mask);
     sigaction(SIGPROF, &act, NULL);//时间到发送SIGROF信号
 }
 
 void init_time()
 {
     struct itimerval val;
          
     val.it_value.tv_sec = 0; //1秒后启用定时器
     val.it_value.tv_usec = 1;
 
     val.it_interval = val.it_value; //定时器间隔为1s
 
     setitimer(ITIMER_PROF, &val, NULL);
 }
 
 int main(int argc, char **argv)
 {
 
     init_sigaction();
     init_time();
 
     while(1);
 
     return 0;
}
原文地址:https://www.cnblogs.com/babydragon/p/12035541.html