定时器 POSIX Timer定时器和setitimer定时器

POSIX 可移植

POSIX:可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX 。

POSIX Timer C API

总结POSIX系统的C标准库:

函数描述
clock_settime()通过指定Value设置clock的分辨率
clock_gettime()获取时钟值
timer_settime()设置和装备或者解除一个定时器
timer_gettime()
timer_create()创建一个POSIX预处理的定时器
timer_delete()删除一个定时器
clock_getres()获取时钟分辨率
timer_getoverrun()获取当前超时的定时器的计数
nanosleep()高分辨率延时当前线程

timer_create()

创建一个POSIX预处理的定时器。

语法

#include <signal.h>
#include <time.h>

描述

timer_create()创建一个新的间隔预处理定时器。参数timerid在一个buffer指针返回一个型的定时器ID,必定是一个非空的指针。ID在进程里是唯一的,直到定时器被清除。新的定时器是初始化解除的。
clockid参数指定新的定时器时钟去测量定时。它能够指定下述其中一个值:

参数值描述
CLOCK_REALTIME一个可设置的系统级的实时时钟。
CLOCK_MONO

clock_settime()和clock_settime()

时钟和时间函数

语法

#include <time.h>
int clock_getres(clockid_t clk_id, struct timespec *res);
int clock_gettime(clockid_t clk_id, struct timespec *tp);
int clock_settime(clockid_t clk_id, const struct timespec *tp);

描述

clock_getres()函数寻找指定时钟clk_id的分辨率。如果res不为NULL,通过res指针存储到结构timespec里。
时钟的分辨率取决于指定的进程执行,而不能通过配置。如果参数 tp 的 clock_settime() 指向的时间值不是 res 的倍数,则它将被截断为 res 的倍数。

setitimer定时器

getitimer和setitimer定时器 获取或者设置内部定时器的值。

语法

#include <sys/time.h>
int getitimer(int which, struct itimerval *curr_value);
int setitimer(int which, const struct itimerval *new_value,struct itimerval *old_value);

描述

这个系统调用提供访问内部定时器,并初始化一些点调用,和可调内部值。当定时器到期时,调用晶灰层产生一个信号,和定时器重置到指定的时间间隔。
指定三个类型定时器结果提供的参数,每个计数器不支持不同的时钟和当时钟到期,生成一个不同的信号:

which选项描述
ITIMER_REAL在real time(当前系统时间)下,定时器计数。在每个定时器到期时,生成一个SIGALRM信号。
ITIMER_VIRTUAL此计时器根据进程消耗的用户模式 CPU 时间进行倒计时,当每一个时间到期,产生一个SIGBTALRM信号。
ITIMER_PROF这个根据进程消耗总的(包括用户和系统)CPU时间进行倒计时。每个时间到期,产生一个SIGPROF信号。

一个进程只能有三种类型定时器其中的一种。若程序which选择ITIMER_REAL。 linux中的sleep、usleep、select、poll等函数的超时结果均也是使用的SIGALRM作为结束信号。若你的定时器按一定周期一直在发SIGALRM信号,那么以上几个函数均有极大可能被提前打断.

定时器的值定义通过下述结构体:

struct itimerval{
	struct timeval it_interval;	/* 周期性定时器的时间间隔 */
	struct timeval it_value;		/* 定时直到下一个周期为止 */
}
struct tiemval{
	time_t tv_sec;				/* 秒 */
	suseconds_t tv_usec;	/* 微妙 */
}

settimer()
函数setitimer()装载或者解除通过指定的which定时器,通过设置new_value指定定时器值。如果old_value是non-NULL,buffer指向前先使用过的返回定时的值。如果两个场都是new_value.itval为0,定时器将被解除。

new_value.it_interval区域指定定时器的新的间隔值;如果两个子场都是零,定时器将一次生效。

返回值

成功返回0.错误返回-1,并适当设置errno.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值