Linux CC++信号2

Linux CC++信号2,第1张

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 一、定时器alarm和定时器setitimer
  • 二、alarm的案例
  • 三、setitimer的案例
  • 总结


一、定时器alarm和定时器setitimer

alarm
使用a l a r m函数可以设置一个时间值(闹钟时间),在将来的某个时刻该时间值会被超过。当所设置的时间值被超过后,产生 S I G A L R M信号。如果不忽略或不捕捉此信号,则其默认动作是终止该进程。
unsigned int alarm(unsigned int seconds) ;
其中,参数s e c o n d s的值是秒数,经过了指定的s e c o n d s秒后会产生信号S I G A L R M。要了解的是,经过了指定秒后,信号由内核产生,由于进程调度的延迟,进程得到控制能够处理该信号还需一段时间。

setitimer
设置定时器(闹钟)。可以替代alarm函数。精度微秒us,可以实现周期性定时。

int setitimer(int which, const struct itimerval *new_value,struct itimerval *old_value);
参数:
which:定时器以什么时间计时
ITIMER_REAL:真实时间,时间到达,发送SIGALARM 常用
ITIMER_VIRTUAL:用户实际,实际到达,发送SIGVTALRM
ITIMER_PROF:以该进程在用户态和内核态下所消耗的时间来计算,时间到达,发送SIGPROF
-new_value:设置定时器的属性
-old_value:记录上一次定时的时间参数,一般不使用,NULL

二、alarm的案例
#include
#include

int main()
{
    int seconds = alarm(5);
    printf("seconds = %d\n",seconds);

    sleep(2);
    seconds = alarm(2);//不阻塞
    printf("seconds = %d\n",seconds);
    
    while(1)
    {

    }

    return 0;
}
三、setitimer的案例
#include
#include
#include 

//过三秒以后,每隔2秒定时一次
int main()
{
    struct itimerval new_value;

    //设置间隔的时间
    new_value.it_interval.tv_sec=2;
    new_value.it_interval.tv_usec=0;

    //设置延迟的时间,3秒之后开始第一次定时
    new_value.it_value.tv_sec=3;
    new_value.it_value.tv_usec=0;


    int ret = setitimer(ITIMER_REAL,&new_value,NULL);//非阻塞
    printf("定时器开始了。。。\n");

    if(ret==-1)
    {
        perror("setitimer");
        exit(0);
    }

    getchar();

    return 0;
}

总结

今天主要给大家介绍了Linux的2种定时器,alarm主要是设置时间然后到达时间之后开始执行,setitimer主要是先设置延迟时间,然后到达延迟时间后,没间隔多少时间执行一次。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/707457.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存