linux 定时器setitimer使用

linux setitimer的使用

reference:Linux manual page

[linux manual page--setitimer]https://man7.org/linux/man-pages/man2/setitimer.2.html

语法

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

参数

  1. which为定时器类型
    ITIMER_REAL: 以系统真实的时间来计算,它送出SIGALRM信号。
    ITIMER_VIRTUAL: 以该进程在用户态下花费的时间来计算,它送出SIGVTALRM信号。
    ITIMER_PROF: 以该进程在用户态下和内核态下所费的时间来计算,它送出SIGPROF信号。
  2. new_value
struct itimerval
{
struct timeval it_interval; /* next value */
struct timeval it_value;    /* current value */
};
  1. old_value 结构同new_value。用来返回上一次定时器的间隔时间,如果不关心该值可设为NULL。

用法描述

  1. 计时
    规定一个启动延时时间由new_value.it_value(!=0)确定,同时设置new_value.it_interval为0
  2. 定时器
    new_value.it_value规定初始定时时间time1,new_value.it_interval指定定时时间time1之后的定时器时间间隔time2;如果重新设置time1=0 && time2=0,则定时器停止

代码示例

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

using namespace std;

void signalHandler(int signo)
{
    switch (signo){
    case SIGALRM:
        printf("Caught the SIGALRM signal!\n");
        break;
    }
}

int main()
{
    signal(SIGALRM, signalHandler);

    struct itimerval new_value, old_value;
    new_value.it_value.tv_sec = 1;
    new_value.it_value.tv_usec = 0;
    new_value.it_interval.tv_sec = 1;
    new_value.it_interval.tv_usec = 0;
    setitimer(ITIMER_REAL, &new_value, &old_value);

    for(;;);

    return 0;
}
posted @ 2021-06-05 22:11  倚剑天下  阅读(367)  评论(0)    收藏  举报