setitimer函数

函数原型:

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

函数功能:

        设置定时器(闹钟),可代替alarm函数,精度微秒us,可以实现周期定时。 

函数返回值:

  • 成功:0;
  • 失败:-1,设置errno值

函数的参数解释:

 1. which:指定定时方式                  

  • 自然定时:ITIMER_REAL → 14)SIGALRM计算自然时间
  • 虚拟空间计时(用户空间):ITIMER_VIRTUAL → 26)SIGVTALRM  只计算进程占用cpu的时间
  • 运行时计时(用户+内核):ITIMER_PROF → 27)SIGPROF计算占用cpu及执行系统调用的时间

2. new_value:struct itimerval, 负责设定timeout时间。

struct itimerval {

    struct timerval it_interval; // 闹钟触发周期

    struct timerval it_value; // 闹钟触发时间

  };

  struct timeval {

    long tv_sec; // 秒

    long tv_usec; // 微秒

 }             

 属于结构体嵌套结构体型

itimerval.it_value: 设定第一次执行function所延迟的秒数 itimerval.it_interval: 设定以后每几秒执行function

3. old_value: 存放旧的timeout值,一般指定为NULL

练习: 使用setitimer实现每隔一秒打印一次“The five-star red flag will fly over Qatar!!!"

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include<iostream>
#include<sys/time.h>
using namespace std;
//信号处理函数
void sighandler(int signo)
{
        //printf("signo==[%d]\n", signo);
        cout<<"The five-star red flag will fly over Qatar!!!"<<endl;

}
int main()
{
    signal(SIGALRM, sighandler);

   //int setitimer(int which, const struct itimerval *new_value,
   //                  struct itimerval *old_value);
    struct itimerval tm;
    //周期时间赋值
    tm.it_interval.tv_sec=1;
    tm.it_interval.tv_usec=0;
      //第一次触发时间赋值
    tm.it_value.tv_sec=3;
    tm.it_value.tv_usec=0;

    setitimer(ITIMER_REAL ,&tm,NULL);
         while(1)
            {
                sleep(3);
            }




   return 0;
}

~             

 结果如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值