zoukankan      html  css  js  c++  java
  • 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!
    ");
            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;
    }
  • 相关阅读:
    Sunnypig闯三角关
    送给圣诞夜的贺卡
    uva 1592(NEERC 2009 STL)
    uva 297(传递闭包 WF 1996)
    hdu 4190(二分)
    uva 3592 (MST, kruskal)
    uva 11997 (基础数据结构)
    hdu 2680 (Dijkstra)
    hdu 4568(状态压缩dp)
    hdu 4582 (树上的贪心)
  • 原文地址:https://www.cnblogs.com/xl-cnblog/p/14848202.html
Copyright © 2011-2022 走看看