timer_create 子例程

用途

创建每个进程计时器。

标准 C 库 (libc.a)

语法

#include <time.h>

int timer_create (clock_id, evp, timerid)
clockid_t clock_id;
struct sigevent *evp;
timer_t *timerid;

描述

timer_create 子例程使用指定的时钟 时钟标识作为计时库来创建每个进程的计时器。 timer_create 子例程在 蒂梅里德引用的位置中返回一个类型为 蒂梅尔特 的计时器标识,用于标识计时器请求中的计时器。 在删除计时器之前,此计时器标识在调用过程中是唯一的。 特定时钟 clock_idtime.h 文件中定义。 返回标识的计时器在从 timer_create 子例程返回时处于已解除的状态。

埃夫普 参数 (如果为非 NULL) 指向 签名事件 结构。 此结构由应用程序分配,用于定义将在计时器到期时发生的异步通知。 如果 埃夫普 参数为 NULL ,那么效果就好像 埃夫普 参数指向 签名事件 结构,其中 sigev_notify 成员具有值 SIGEV_SIGNALsigev_signo 成员具有 SIGALARM 缺省信号号, sigev_value 成员具有计时器标识的值一样。

此系统定义了一组时钟,这些时钟可用作每个进程计时器的计时基础。 时钟标识 参数的受支持值如下所示:
描述
CLOCK_REALTIME 全系统实时时钟。
CLOCK_MONOTONIC 全系统单调时钟。 此时钟的值表示自过去某个未指定点以来经过的时间量。 它不能通过 clock_settime 子例程进行设置,并且不能具有向后时钟跳跃。
CLOCK_PROCESS_CPUTE_ID 调用进程的进程 CPU-时间时钟。 该时钟的值表示与该时钟相关联的进程的执行时间量。
CLOCK_THREAD_CPUTE_ID 正在调用的线程的线程 CPU 时间时钟。 该时钟的值表示与该时钟相关联的线程的执行时间量。
如果为 时钟标识 参数定义的值对应于以下内容,那么 timer_create 子例程将失败:
  • 进程的 CPU 时间时钟与调用函数的进程的 CPU 时间时钟不同
  • 与调用函数的线程不同的线程的线程 CPU-时间时钟。

参数

描述
时钟标识 指定要使用的时钟。
evp 指向定义了异步通知的 签名事件 结构。
蒂梅里德 指向计时器标识返回所在的位置。

返回值

如果 timer_create 子例程成功,那么将返回 0 ,并且 蒂梅里德 参数引用的位置将更新为 蒂梅尔特,该值可以传递给每个进程的计时器调用。 如果发生错误,将返回-1并设置errno以指示错误。

错误代码

在以下情况下, timer_create 子例程将失败:
描述
EAGAIN 系统缺少足够的信号排队资源来接受请求。
EAGAIN 调用进程已经创建了允许它的所有计时器。
EINVAL 未定义指定的时钟标识。
ENOTSUP 实现不支持创建附加到 CPU 时间时钟的计时器,该时钟由 时钟标识 参数指定,并且与进程或线程 (不同于调用 timer_create的进程或线程) 相关联。
ENOTSUP 检查点重新启动进程不支持该功能。