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_id在 time.h 文件中定义。 返回标识的计时器在从 timer_create 子例程返回时处于已解除的状态。
埃夫普 参数 (如果为非 NULL) 指向 签名事件 结构。 此结构由应用程序分配,用于定义将在计时器到期时发生的异步通知。 如果 埃夫普 参数为 NULL ,那么效果就好像 埃夫普 参数指向 签名事件 结构,其中 sigev_notify 成员具有值 SIGEV_SIGNAL, sigev_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 | 检查点重新启动进程不支持该功能。 |