getinterval , incinterval , absinterval , resinc , resabs ,警报,u闹铃, getitimer 或 setitimer 子例程

用途

处理时间间隔计时器的到期时间。

标准 C 库 (libc.a)

语法

#include <sys/time.h>

int getinterval ( timerID,  value)
timer_t timerID;
struct itimerstruc_t *value;

int incinterval (timerID, value,  ovalue)
timer_t timerID;
struct itimerstruc_t *value, *ovalue;

int absinterval (timerID, value, ovalue)
timer_t timerID;
struct itimerstruc_t *value, *ovalue;

int resabs (timerID,  resolution,  maximum)
timer_t timerID;
struct timestruc_t *resolution, *maximum;

int resinc (timerID, resolution, maximum)
timer_t timerID;
struct timestruc_t *resolution, *maximum;

#include <unistd.h>
unsigned int alarm ( seconds)
unsigned int seconds;

useconds_t ualarm (value,  interval)
useconds_t value, interval;

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

int getitimer (which, value)
int which;
struct itimerval *value;

描述

getintervalincintervalabsinterval 子例程处理时间间隔计时器的到期时间。 这些函数使用由 struct itimerstruc_t 结构定义的计时器值,该结构包含以下字段:

struct timestruc_t it_interval;   /* timer interval period      */
struct timestruc_t it_value;      /* timer interval expiration  */

如果it_value字段非零,指示下次计时器到期的时间。 如果it_value为 0 ,将禁用每个进程计时器。 如果it_interval成员非零,它指定要用于重新装入it_value计时器到期时的字段。 如果it_interval为 0 ,将在计时器下次到期后禁用计时器 (假定it_value非零)。

getinterval 子例程将 struct itimerstruc_t 结构中的值返回到 value 参数。 该it_value此结构的字段表示当前时间间隔内计时器到期之前的时间量,对于 timerID 参数中指定的每个进程计时器,应该存在一个时间间隔。 该it_interval字段具有 incintervalabsinterval 子例程最后设置的值。 value 参数的字段取决于计时器的分辨率。

incinterval 子例程将每个进程计时器的值设置为当前计时器设置的给定偏移量。 absinterval 子例程将每个进程计时器的值设置为给定的绝对值。 如果指定的绝对时间已到期,那么 absinterval 子例程将成功并且将发出到期通知。 两个子例程都将更新时间间隔计时器周期。 小于指定计时器的分辨率的时间值将向上舍入到此分辨率。 大于指定计时器的最大值的时间值将向下舍入为最大值。

resincresabs 子例程返回 timerID 参数中包含的时间间隔计时器的分辨率和最大值。 时间间隔计时器的分辨率包含在 resolution 参数中,最大值包含在 maximum 参数中。 这些值可能与相应的系统计时器 ( gettimer 子例程) 返回的值不同。 此外, resincresabs 子例程返回的最大值可能不同。

注: 如果非特权用户尝试提交精细粒度计时器 (即小于 10 毫秒的计时器请求) ,那么计时器请求将提升到 10 毫秒。

闹铃 子例程使系统在经过 seconds 参数指定的实时秒数之后,向调用线程的进程发送 SIGALRM 信号。 由于信号被发送到进程,在多线程进程中,与调用 闹铃 子例程的线程相比,另一个线程可能接收到 SIGALRM 信号。 处理器调度延迟可能会阻止进程在信号生成后立即处理信号。 如果 seconds 参数的值为 0 ,那么将取消暂挂警报请求 (如果有)。 警报请求不堆叠。 只能以此方式调度一个 SIGALRM 生成。 如果尚未生成 SIGALRM 信号,那么调用将导致重新调度生成 SIGALRM 信号的时间。 如果进程中的多个线程调用 闹铃 子例程,那么只有最后一个调用才会生效。

u闹铃 子例程在指定的秒数内向调用进程发送 SIGALRM 信号。 getitimer 子例程获取时间间隔计时器的值。 setitimer 子例程设置时间间隔计时器的值。

参数

描述
timerID 指定时间间隔计时器的标识。
value 指向 struct itimerstruc_t 结构。
ovalue 表示上一个超时时间段。
分辨率/解析 (resolution) 计时器的分辨率。
最大值 指示时间间隔计时器的最大值。
指定在第一个 SIGALRM 信号之前要经过的实时秒数。
时间间隔 指定后续定期 SIGALRM 信号之间的微秒数。 如果非特权用户尝试提交精细粒度计时器 (即小于 10 毫秒的计时器请求) ,那么会自动将计时器请求时间间隔提高到 10 毫秒。
which 标识计时器的类型。 有效值是:
ITIMER_PROF
减少进程虚拟时间以及代表进程运行系统的时间。 它旨在供解释器在对已解释程序的执行进行统计概要分析时使用。 每次 ITIMER_PROF 计时器到期时,都会出现 SIGPROF 信号。 因为此信号可能中断进行中的系统调用,所以使用此计时器的程序必须准备好重新启动中断的系统调用。
ITIMER_REAL
实时递减。 当此计时器到期时,将发生 SIGALRM 信号。
ITMER_真实_TH
每个线程的实时计时器。 实时递减并在到期时传递 SIGTALRM 信号。 SIGTALRM 发送到设置计时器的线程。 每个线程都有自己的计时器,可以操作自己的计时器。 此计时器仅受 1: 1 线程模型支持。 如果在 M: N 线程模型中使用计时器,那么可能会出现未定义的结果。
ITIMER_VIRTUAL
减少流程虚拟时间。 它仅在进程执行期间运行。 SIGVTALRM 信号在到期时发生。

返回值

如果这些子例程成功,那么将返回值 0。 如果发生错误,则返回值为-1并设置errno全局变量。

警报 子例程返回在调度系统从先前调用 警报生成 SIGALARM 信号之前剩余的时间量 (以秒计)。 如果没有先前的 警报 请求,那么它将返回 0。

u闹铃 子例程返回闹钟中先前剩余的微秒数。

错误代码

If the 获取时间间隔, incinterval, absinterval, 恢复名誉, 恢复, 设定计时器, getitimer, or 设置计时器 subroutine is unsuccessful , a value of -1 is returned and the 错误 global variable is set to one of the following error codes:

描述
EINVAL 指示 timerID 参数与 gettimerid 子例程返回的标识不对应,或者值结构指定了小于 0 或大于或等于 1000 万 (1,000,000,000) 的纳秒值。
EIO 指示访问计时器设备时发生错误。
Efault 指示参数地址引用了无效内存。

警报 子例程始终成功。 未保留任何返回值以指示其错误。