Linux时间类型、函数和休眠函数

参数clock_id指明该函数使用哪个时钟检测有没有睡够。有CLOCK_REALTIME、 CLOCK_MONOTONIC 、CLOCK_PROCESS_CPUTIME_ID三种可选时钟。上面已经对这些时间进行了讲解这里就不多说了。

参数flags指明用的是不是绝对时间。如果该值为0,则使用的是一个时间段(即休眠的时长)。如果该参数为设置为TIMER_ABSTIME,那么就是使用绝对时间。

参数request指明休眠时间。有参数flags指明这是一个时间段还是绝对时间。

参数remain的作用和前面nanosleep函数的rem参数一样。当flags指明request是一个时间段,并且本函数被信号打断时,remain将得到余下的休眠时间。这个参数可以为NULL。

如果flags指定使用绝对时间,并且request指明的时间小于或者等于当前时间,那么clock_nanosleep函数将马上返回,不会进入休眠。

当clock_nanosleep成功休眠了指定的时间,将返回0。否则返回错误值,不设置errno变量。这点和其他的休眠函数不同。有下面这些错误值。

FAULT: request或者remain指向一个非法地址(即野指针)

EINTR:本函数被信号函数打断了

EINVAL:request的tv_nsec成员的范围不是在0到999999999,即它是一个非法值。当clock_id不是去上面说到的那三个值时,也将返回EINVAL。要注意:clock_nanosleep并不支持CLOCK_THREAD_CPUTIME_ID。

该函数要注意的一些问题:因为该函数可以使用CLOCK_REALTIME时钟并且该时钟可以被手动修改。这可能会影响clock_nanosleep函数。首先,如果flags指明的是一个时间段,那么clock_nanosleep和nanosleep函数一样,没有影响。

如果用户修改了CLOCK_REALTIME时钟的值,必然会对正在利用该时钟进行睡眠的clock_nanosleep产生影响。

该函数的使用,需要Linux内核版本不小于2.6,glibc版本不小于2.1

愈想得到,就愈要放手。放手是很难的,但是别无选择。

Linux时间类型、函数和休眠函数

相关文章:

你感兴趣的文章:

标签云: