getinterval , incinterval , absinterval , resinc , resabs ,警报,u闹铃, getitimer 或 setitimer 子例程
用途
处理时间间隔计时器的到期时间。
库
标准 C 库 (libc.a)
语法
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;
描述
getinterval, incinterval和 absinterval 子例程处理时间间隔计时器的到期时间。 这些函数使用由 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字段具有 incinterval 或 absinterval 子例程最后设置的值。 value 参数的字段取决于计时器的分辨率。
incinterval 子例程将每个进程计时器的值设置为当前计时器设置的给定偏移量。 absinterval 子例程将每个进程计时器的值设置为给定的绝对值。 如果指定的绝对时间已到期,那么 absinterval 子例程将成功并且将发出到期通知。 两个子例程都将更新时间间隔计时器周期。 小于指定计时器的分辨率的时间值将向上舍入到此分辨率。 大于指定计时器的最大值的时间值将向下舍入为最大值。
resinc 和 resabs 子例程返回 timerID 参数中包含的时间间隔计时器的分辨率和最大值。 时间间隔计时器的分辨率包含在 resolution 参数中,最大值包含在 maximum 参数中。 这些值可能与相应的系统计时器 ( gettimer 子例程) 返回的值不同。 此外, resinc 和 resabs 子例程返回的最大值可能不同。
闹铃 子例程使系统在经过 seconds 参数指定的实时秒数之后,向调用线程的进程发送 SIGALRM 信号。 由于信号被发送到进程,在多线程进程中,与调用 闹铃 子例程的线程相比,另一个线程可能接收到 SIGALRM 信号。 处理器调度延迟可能会阻止进程在信号生成后立即处理信号。 如果 seconds 参数的值为 0 ,那么将取消暂挂警报请求 (如果有)。 警报请求不堆叠。 只能以此方式调度一个 SIGALRM 生成。 如果尚未生成 SIGALRM 信号,那么调用将导致重新调度生成 SIGALRM 信号的时间。 如果进程中的多个线程调用 闹铃 子例程,那么只有最后一个调用才会生效。
u闹铃 子例程在指定的秒数内向调用进程发送 SIGALRM 信号。 getitimer 子例程获取时间间隔计时器的值。 setitimer 子例程设置时间间隔计时器的值。
参数
| 项 | 描述 |
|---|---|
| timerID | 指定时间间隔计时器的标识。 |
| value | 指向 struct itimerstruc_t 结构。 |
| ovalue | 表示上一个超时时间段。 |
| 分辨率/解析 (resolution) | 计时器的分辨率。 |
| 最大值 | 指示时间间隔计时器的最大值。 |
| 秒 | 指定在第一个 SIGALRM 信号之前要经过的实时秒数。 |
| 时间间隔 | 指定后续定期 SIGALRM 信号之间的微秒数。 如果非特权用户尝试提交精细粒度计时器 (即小于 10 毫秒的计时器请求) ,那么会自动将计时器请求时间间隔提高到 10 毫秒。 |
| which | 标识计时器的类型。 有效值是:
|
返回值
如果这些子例程成功,那么将返回值 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 | 指示参数地址引用了无效内存。 |
警报 子例程始终成功。 未保留任何返回值以指示其错误。