打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Linux?定时器setitimer()

Linux 定时器setitimer()(2010-06-11 10:54:25)
标签:

杂谈

分类: Linux

用法:
#include <sys/time.h>

int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

 

功能描述:
获取或设定间歇计时器的值。系统为进程提供三种类型的计时器,每一类以不同的时间域递减其值。当计时器超时,信号被发送到进程,之后计时器重启动。

 
参数:
which:间歇计时器类型,有三种选择

ITIMER_REAL //数值为0,以系统真实的时间来计算,发送的信号是SIGALRM。
ITIMER_VIRTUAL //数值为1,以该进程在用户态下花费的时间来计算,发送的信号是SIGVTALRM。
ITIMER_PROF //数值为2, 以该进程在用户态下和内核态下所费的时间来计算,发送的信号是SIGPROF。

 

value,ovalue:时间参数,原型如下

struct itimerval {
    struct timeval it_interval;
    struct timeval it_value;   
};

struct timeval {
    long tv_sec;               
    long tv_usec;              
};

    itimerval结构中的it_value是减少的时间,当这个值为0的时候就发出相应的信号了. 然后再将it_value设置为it_interval值. 也就是先处理it_value中设置的值,为0后发送信号(根据which来判断发送什么信号),之后都是根据it_interval的值发送信号。若 it_value为0,就没有相应的信号产生了。

 

getitimer()用计时器的当前值填写value指向的结构体。
setitimer()将 value 指向的结构体设为计时器的当前值,如果ovalue不是NULL,将返回计时器原有值。


返回说明:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EFAULT:value 或ovalue是不有效的指针
EINVAL:其值不是ITIMER_REAL,ITIMER_VIRTUAL 或 ITIMER_PROF之一

 

例子:
void sigroutine(int signo)
{
 static int count1=0,count2=0;

 switch (signo)
 {
 case SIGALRM:
  count1++;
  printf("Catch a signal -- SIGALRM \n");
  printf("count1 = %d\n\n", count1);
  signal(SIGALRM, sigroutine);
  break;
 case SIGVTALRM:
  count2++;
  printf("Catch a signal -- SIGVTALRM \n");
  printf("count2 = %d\n\n", count2);
  signal(SIGVTALRM, sigroutine);
  break;
 }
 return;
}

 

int main()
{
 struct itimerval value, ovalue, value2;
 printf("process id is %d\n", getpid());

 signal(SIGALRM, sigroutine);
 signal(SIGVTALRM, sigroutine);

 

 value.it_value.tv_sec = 2;
 value.it_value.tv_usec = 0;
 value.it_interval.tv_sec = 3;
 value.it_interval.tv_usec = 0;
 setitimer(ITIMER_REAL, &value, &ovalue);

 

 value2.it_value.tv_sec = 1;
 value2.it_value.tv_usec = 0;
 value2.it_interval.tv_sec = 3;
 value2.it_interval.tv_usec = 0;
 setitimer(ITIMER_VIRTUAL, &value2, &ovalue);

 

 while(1);
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux定时器的使用
我曾经用过的源代码-setitimer 设置“闹钟”
linux精通定时器
Linux系统编程 | 信号的产生
setitimer函数使用笔记 - Jiwu Bu - C++博客
计时函数的使用_Linux应用技巧_Linux_操作系统
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服