C语言定时器 setitimer

setitimer函数用于设置定时器,并指定定时器到期后所产生的信号行为。其函数原型如下:

#include <sys/time.h>

int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);

该函数接受三个参数:

  • which:指定定时器类型,可以是以下两个值之一:

    • ITIMER_REAL:真实时间定时器,使用系统实时时间,到期后将发送SIGALRM信号。
    • ITIMER_VIRTUAL:虚拟时间定时器,使用进程运行时间,到期后将发送SIGVTALRM信号。
    • ITIMER_PROF:以两者之和作为时间基准,到期后将发送SIGPROF信号。
  • new_value:一个指向struct itimerval结构体的指针,用于指定新的定时器值(启动时间和间隔时间)。

    • it_value字段表示定时器首次到期的时间间隔。
    • it_interval字段表示定时器循环触发的时间间隔。
  • old_value:一个指向struct itimerval结构体的指针,用于获取旧的定时器值,即之前设置的定时器值。如果不需要获取旧的定时器值,则可以传入NULL。

调用setitimer函数后,会根据new_value所指定的定时器值来启动或修改定时器。到期后,系统会发送相应的信号,并根据信号处理机制执行相应的操作。可以使用signal函数或sigaction函数来捕获并处理定时器到期产生的信号。

以下是一个示例代码,演示如何使用setitimer函数设置一个定时器:

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

void timer_handler(int signum) {
    printf("Timer expired!\n");
}

int main() {
    struct itimerval timer;
    
    // 设置首次触发定时器为1秒后,定时器到期后每10秒触发一次
    timer.it_interval.tv_sec = 10;
    timer.it_interval.tv_usec = 0;
    timer.it_value.tv_sec = 1;
    timer.it_value.tv_usec = 0;

    // 注册信号处理函数
    signal(SIGALRM, timer_handler);

    // 启动定时器
    setitimer(ITIMER_REAL, &timer, NULL);

    // 死循环,等待定时器到期
    while (1);

    return 0;
}

上述代码中,我们设置了一个定时器,其初次到期时间为1秒后,之后每10秒触发一次。当定时器到期时,会触发SIGALRM信号,并通过注册的信号处理函数timer_handler进行处理。在示例代码中,我们只是简单地打印一条信息并没有做其他处理。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光头,强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值