Linux多进程15-setitimer定时器函数

#include <sys/time.h>

int setitimer(int which, const struct itimerval *new_value,
                struct itimerval *old_value);
    - 功能: 设置定时器(闹钟), 可以替代alarm函数, 精度微妙(us), 可以实现周期性的定时
    - 参数:
        - which: 定时器以什么时间计时
            - ITIMER_REAL: 真实时间, 时间到达, 发送SIGALRM 常用
            - ITIMER_VIRTUAL: 用户时间, 时间到达, 发送SIGVTALRM信号
            - ITIMER_PROF: 以该进程在用户态和内核态下所消耗的时间来计算, 时间到达, 发送SIGPROF信号

        - new_value: 设置定时器的属性
            struct itimerval {              // 定时器结构体
                struct timeval it_interval; // 每个间隔时间 Interval for periodic timer
                struct timeval it_value;    // 延迟多长时间执行 Time until next expiration
            };

            struct timeval {                // 时间的结构体
                time_t      tv_sec;         // 秒       seconds
                suseconds_t tv_usec;        // 微秒     microseconds
            };
            例如: 过10S (it_value)后, 每隔2秒 (it_interval)定时一次

        - old_value: 记录上一次的定时时间参数(一般不使用, 指定NULL)

    - 返回值: 0成功, -1失败并设置错误号
#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>

//过3S后, 每隔2S定时一次
int main(int argc, char const *argv[])
{
    struct itimerval new_value;
    //设置间隔时间
    new_value.it_interval.tv_sec = 2;
    new_value.it_interval.tv_usec = 0;
    //设置延迟时间, 3S后开始第一次定时
    new_value.it_value.tv_sec = 3;
    new_value.it_value.tv_usec = 0;
    
    int ret = setitimer(ITIMER_REAL, &new_value, NULL);
    if (ret == -1)
    {
        perror("setitimer err");
        exit(0);
    }
    printf("定时器开始了...\n");

    getchar();

    return 0;
}

运行

$./setitimer 
定时器开始了...  #3s 后程序结束
闹钟
posted @ 2023-05-17 18:41  言叶以上  阅读(52)  评论(0编辑  收藏  举报