setitimer函数
和alarm函数类似,都用于定时操作;
函数原型:int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
参数:which是指定的定时方式
①自然定时:ITIMER_REAL → 14)SIGLARM 计算自然时间
② 虚拟空间计时(用户空间):ITIMER_VIRTUAL → 26)SIGVTALRM 只计算进程占用cpu的时间
③ 运行时计时(用户+内核):ITIMER_PROF → 27)SIGPROF 计算占用cpu及执行系统调用的时间
new_value被const限定,这是一个传入参数;old_value没有const,这是一个传出参数。结构体itimerval是这样的:
struct
itimerval {
struct
timeval it_interval; /* Interval for periodic timer */
struct
timeval it_value; /* Time until next expiration */
};
结构体timeval是这样的:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
为了更好的理解,我写了下面的代码:
#include
<stdlib.h>
#include
<stdio.h>
#include
<sys/time.h>
#include
<signal.h>
void mafunc(int
signo)
{
puts("hello, world.");
}
int main(void)
{
struct
itimerval it, oldit;
signal(SIGALRM, myfunc);//信号捕捉函数,不执行SIGALRM信号的默认动作
it.it_value.tv_sec = 5;//秒
it.it_value.tv_usec = 0;//微秒
it.it_interval.tv_sec = 3;
it.it_interval.tv_usec = 0;
if (setitimer(ITIMER_REAL, &it, &oldit) == -1)
{
perror("setitimer error ");
exit(1);
}
while (1);
return 0;
}
执行之后,间隔5秒之后打印hello,world。然后在间隔三秒打印,后续的都是间隔3秒。
这里我们知道:new_value.it_interval是用来控制第一次定时时长,new_value.it_value是用来定时后续定时的时长,并且是程序不死就连续定时(即,信号被我们捕捉,不执行默认动作了)。
如果想知道定时器还有多久定到时间,再次调用setitimer函数,取出old_value可查看。
setitimer函数的更多相关文章
- UNIX环境高级编程——信号之kill、raise、killpg、alarm、pause、abort、sleep、usleep、nanosleep和setitimer函数
一.kill, raise, killpg 函数 int kill(pid_t pid, int sig); int raise(int sig); int killpg(int pgrp, int ...
- setitimer()函数
定时器时间函数 struct itimerval: struct itimerval *new_value,其定义如下: struct itimerval { struct timeval it_in ...
- Linux系统编程-setitimer函数
功能:linux系统编程中,setitimer是一个经常被使用的函数,可用来实现延时和定时的功能. 头文件:sys/time.h 函数原型: int setitimer(int which, cons ...
- setitimer()函数使用
setitimer()为Linux的API,并非C语言的Standard Library,setitimer()有两个功能,一是指定一段时间后,才执行某个function,二是每间格一段时间就执行某个 ...
- Signal ()函数详细介绍 Linux函数
http://blog.csdn.net/ta893115871/article/details/7475095 Signal ()函数详细介绍 Linux函数 signal()函数理解 在<s ...
- linux c setitimer使用方法说明
在linux c编程中.setitimer是一个比較经常使用的函数.可用来实现延时和定时的功能,网上有各种零零散散的使用方法说明,都仅仅提到了个别使用方法,今天抽出时间实践整理了一份比較具体的: 使用 ...
- Signal ()函数详细介绍 Linux函数(转)
Signal ()函数详细介绍 Linux函数 收藏人:紫火神兵 2012-09-27 | 阅:5659 转:22 | 来源 | 分享 signa ...
- 转:函数signal()
from:http://blog.sina.com.cn/s/blog_4b226b92010119l5.html 当服务器close一个连接时,若client端接着发数据.根据TCP协议的规定,会收 ...
- linux几种定时函数的使用
Linux定时函数介绍: 在程序开发过程中,我们时不时要用到一些定时器,通常如果时间精度要求不高,可以使用sleep,uslepp函数让进程睡眠一段时间来实现定时, 前者单位为秒(s),后者为微妙(u ...
随机推荐
- Schiff Move Free维骨力这个牌子的保健效果怎么样,是要给中老年人群服用的
Schiff Move Free维骨力这个牌子的保健效果怎么样,是要给中老年人群服用的.? https://www.zhihu.com/question/46399868 服move free还要补钙 ...
- zabbix 3.4新功能值解析——Preprocessing预处理
Zabbix 3.4版本更新了许多新功能,其中一个监控项功能Preprocessing,根据官方说明文档,在监控项收集的数据存储到数据库前,预先对数据进行处理,使用效果超过预期.这个功能存放位置在创建 ...
- CRM 2016 IFrame 函数修改 父页面字段
IFrame js 代码: parent.Xrm.Page.getAttribute("new_xxxx").setValue(123); 当然,可以设置 new_xxxx 字段的 ...
- Android重打包+重新签名工具Apktool Box
可实现apk反编译+重新打包+重新签名,界面如下 : 部分引用自开源代码:http://github.com/Bu4275/AutoAPKTool
- delphi正则表达式学习笔记(一)
在 Delphi 中是没有自带的正则表达式库的,在网上能找到的用于 Delphi 的正则表达式类大体上有两个,分别是 PerlRegEx 和 RegExpr. 前者相当强大,但发布程序时需要带上他的一 ...
- flask框架get post方式
设置路由的访问方式get post常用的两种 # -*- coding: utf-8 -*- # Flask hello world from flask import Flask, redirect ...
- python if all
#encoding:utf-8 s=['1','9']sta='56789'# if all(t not in sta for t in s):# print staif all(t not ...
- 启动tomcat时cmd窗口一闪而过
在tomcat的安装目录下 双击startup.bat启动时cmd窗口一闪而过 1.在系统中查看配置JDK的环境变量是否正确 2.进入tomcat的安装目录 在启动tomcat时流程是:startup ...
- linux常用命令以及快捷键
find命令查找某些文件并将其拷贝到指定目录 [root@host lib]# find -name "*hbase*.jar" |xargs -i cp {} /root/aa ...
- php多图片上传。
1. <form method="post" enctype="multipart/form-data" action='请求地址' > <i ...