名称

timer_getoverrun-获取POSIX每进程计时器的溢出计数

返回值

成功时,timer_getoverrun()返回指定计时器的溢出计数;否则,返回0。如果未发生超限,则此计数可能为0。失败时,将返回-1,并且将errno设置为指示错误。

错误说明

EINVAL
timerid不是有效的计时器ID。
TIMER_GETOVERRUN - Linux手册页

Linux程序员手册 第2部分
更新日期: 2020-06-09

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

另外参见

clock_gettime(2),sigaction(2),signalfd(2),sigwaitinfo(2),timer_create(2),timer_delete(2),timer_settime(2),signal(7),time(7)

示例

请参见timer_create(2)。

说明

timer_getoverrun()返回timerid引用的计时器的"溢出计数"。应用程序可以使用溢出计数来准确计算在给定时间间隔内将发生的计时器到期数。通过信号(SIGEV_SIGNAL)和线程(SIGEV_THREAD)接收到期通知时,都会发生计时器溢出。

通过信号传递到期通知后,可能会发生超限。无论是否将实时信号用于计时器通知,系统每个计时器最多只能排队一个信号。 (这是POSIX.1规定的行为。另一种选择是,为每个计时器到期排队一个信号,很容易导致系统上排队的信号的允许限制溢出。)由于系统调度延迟,或者因为该信号可能是临时阻止,在生成通知信号的时间与传递(例如,由信号处理程序捕获)或接受(例如,使用sigwaitinfo(2))之间的时间之间可能存在延迟。在此时间间隔内,可能还会发生其他计时器到期。计时器超速计数是在信号生成到传递或接受信号之间发生的附加计时器到期次数。

当通过线程的调用传递到期通知时,也可能发生计时器超速运行,因为在计时器的到期和通知线程的调用之间可能存在任意延迟,并且在该延迟间隔中,可能会发生其他计时器到期。

版本

从Linux 2.6开始,此系统调用可用。

备注

当通过信号(SIGEV_SIGNAL)传递计时器通知时,在Linux上,也可以通过soirnfo_t结构的si_overrun字段获得溢出计数(请参见sigaction(2))。这使应用程序可以避免进行系统调用来获取超支计数的开销,但它是POSIX.1的不可移植的扩展。

POSIX.1仅在使用信号的计时器通知的上下文中讨论计时器溢出。

BUGS

POSIX.1指定如果计时器溢出计数等于或大于实现定义的最大值DELAYTIMER_MAX,则timer_getoverrun()应该返回DELAYTIMER_MAX。但是,Linux并没有实现此功能:相反,如果计时器溢出值超出了可表示的最大整数,则计数器会从低值开始再次循环。

语法

#include <time.h>

int timer_getoverrun(timer_t timerid);

与-lrt链接。

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

timer_getoverrun():_POSIX_C_SOURCE> = 199309L

遵循规范

POSIX.1-2001,POSIX.1-2008。

日期:2019-08-20 17:59:34 来源:oir作者:oir