• Linux 定时器


    原文地址:http://www.dutor.net/index.php/2009/07/linux-timer/

    Linux 为每个进程提供了三个定时器:

    • ITIMER_REAL: 给一个指定的时间间隔,按照实际的时间来计数,发出SIGALRM信号;
    • ITIMER_VIRTUAL: 当进程执行的时候才计数,发出SIGVTALRM信号;
    • ITIMER_PROF: 当进程执行或者是系统为进程调度的时候计数,发出SIGPROF信号。这个和ITIMER_VIRTUAL联合,常用来计算系统内核时间和用户时间。

    两个提供定时参数的结构体定义:

    strcut timeval
    {
        //~ 秒
        long tv_sec; 
        //~ 微秒
        long tv_usec; 
    };
     
    struct itimerval
    {
        //~ 时间间隔
        struct timeval it_interval; 
        //~ 当前时间计数
        struct timeval it_value;  
    };

    一个Demo

    #include <iostream>
    #include <time.h>
    #include <signal.h>
    #include <sys/time.h>
    using namespace std;
    int cnt = 0;
     
    void set_timer()
    {
        struct itimerval itv, oldtv;
        //~ 定时间隔1秒0微秒
        itv.it_interval.tv_sec = 1;
        itv.it_interval.tv_usec = 0;
        //~ 初始计时
        itv.it_value = itv.it_interval;
        //~ 打开定时器ITIMER_REAL
        setitimer(ITIMER_REAL, &itv, &oldtv);
    }
     
    //~ 定时器中断处理程序入口
    void sigalrm_handler(int sig)
    {
        cnt++;
        printf("timer trigered .. %d \n", cnt);
    }
     
     
    int 
    main()
    {
        //~ 设定信号SIGALRM的处理函数
        signal(SIGALRM, sigalrm_handler);
        set_timer();
        while(true)
        {
    	usleep(100000);
    	cout<<"proceeding>>>"<<endl;
        }
        return 0;
    }

  • 相关阅读:
    [ Openstack ] Openstack-Mitaka 高可用之 环境初始化
    [ Openstack ] OpenStack-Mitaka 高可用之 概述
    Swift
    Swift
    报错
    归并排序
    堆排序
    插入排序
    早睡早起身体好
    用于查询的日期类型转换帮助类
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2128947.html
Copyright © 2020-2023  润新知