Linux 定时器setitimer()
来源:互联网 发布:5.48数据库 编辑:程序博客网 时间:2024/05/21 13:34
用法:
#include <sys/time.h>
int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value, structitimerval *ovalue);
功能描述:
获取或设定间歇计时器的值。系统为进程提供三种类型的计时器,每一类以不同的时间域递减其值。当计时器超时,信号被发送到进程,之后计时器重启动。
参数:
which:间歇计时器类型,有三种选择
ITIMER_REAL //数值为0,以系统真实的时间来计算,发送的信号是SIGALRM。
ITIMER_VIRTUAL//数值为1,以该进程在用户态下花费的时间来计算,发送的信号是SIGVTALRM。
ITIMER_PROF //数值为2,以该进程在用户态下和内核态下所费的时间来计算,发送的信号是SIGPROF。
value,ovalue:时间参数,原型如下
struct itimerval {
};
struct timeval {
};
struct timeval
{
__time_ttv_sec;
__suseconds_ttv_usec;
};
其中,tv_sec为Epoch到创建structtimeval时的秒数,tv_usec为微秒数,即秒后面的零头。比如当前我写博文时的tv_sec为1244770435,tv_usec为442388,即当前时间距Epoch时间1244770435秒,442388微秒。需要注意的是,因为循环过程,新建结构体变量等过程需消耗部分时间,我们作下面的运算时会得到如下结果:
int i;
for (i = 0; i < 4; ++i)
{
gettimeofday(&tv, NULL);
printf("%dt%dn", tv.tv_usec, tv.tv_sec);
sleep(1);
}
442388
443119
443543
444153
前面为微秒数,后面为秒数,可以看出,在这个简单运算中,只能精确到小数点后面一到两位,或者可以看出,每进行一次循环,均需花费0.005秒的时间,用这个程序来作计时器显然是不行的,除非精确计算产生的代码消耗时间。
getitimer()用计时器的当前值填写value指向的结构体。
setitimer()将 value 指向的结构体设为计时器的当前值,如果ovalue不是NULL,将返回计时器原有值。
返回说明:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EFAULT:value 或ovalue是不有效的指针
EINVAL:其值不是ITIMER_REAL,ITIMER_VIRTUAL 或 ITIMER_PROF之一
例子:
void sigroutine(int signo)
{
}
int main()
{
}
- linux定时器setitimer
- Linux 定时器setitimer()
- Linux 定时器setitimer()
- Linux 定时器setitimer()
- linux中定时器 setitimer()
- linux c setitimer定时器
- Linux定时器之setitimer()
- Linux定时器函数setitimer
- Linux定时器——setitimer()
- linux定时器 --setitimer 的用法
- Linux定时器设置函数setitimer
- 【linux 开发】定时器使用setitimer
- linux下定时器函数 setitimer()
- LINUX setitimer创建定时器实例
- linux下setitimer定时器与定时器取消
- setitimer 定时器
- Linux下的定时器:alarm()与setitimer()
- Linux下的定时器:alarm()与setitimer()
- 第四章 数据库——数据查询Ⅰ
- GSM 三种分配信道的方式讲解
- java中的内存分配
- (9)21.2.4 从任务中产生返回值Callable
- 职业生涯规划书
- Linux 定时器setitimer()
- TreeSet的第二种排序方式
- 经典排序算法 – 插入排序Insertion sort
- 存储IOPS与吞吐量的计算
- SUN ZFS STORAGE 7320阵列管理
- 解读Android LOG机制的实现
- 按照字符串长度排序
- e语言数组使用
- struts中的拦截器验证登录