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 后程序结束
闹钟

本文作者:言叶以上

本文链接:https://www.cnblogs.com/anqwjoe/p/17409746.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   言叶以上  阅读(64)  评论(0编辑  收藏  举报
历史上的今天:
2018-05-17 Vue.js 基础知识
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起