休眠, nsleep 或 usleep 子例程
用途
暂挂执行中的当前进程。
库
标准 C 库 (libc.a)
语法
unsigned int sleep ( Seconds)
useconds_t Useconds;
描述
sleep, usleep或 nsleep 子例程暂挂当前进程,直到:
- Seconds, Useconds或 Rqtp 参数指定的时间间隔。
- 将信号传递到启动信号捕获功能或结束进程的调用进程。
- 通过事件通知功能向流程通知事件。
由于系统调度其他活动,暂挂时间可能比请求的时间长。 返回时,将更新由 Rmtp 参数指定的位置以显示时间间隔中剩余的时间,或者更新 0 (如果已经过完整时间间隔)。
参数
| 项 | 描述 |
|---|---|
| Rqtp | 为暂挂执行指定的时间间隔。 |
| RMTp | 指定时间间隔计时器或 0 上的剩余时间。 |
| 秒数 | 指定时间间隔 (以秒计)。 |
| Useconds | 指定时间间隔 (以微秒为单位)。 此参数仅可用于 usleep 子例程。 |
兼容性接口
sleep 和 usleep 子例程是 nsleep 子例程的简化格式。 这些子例程确保与较旧版本的可移植操作系统接口 (POSIX) 和 Linux® 规范兼容。 sleep 子例程将当前进程暂挂一整秒。 usleep 子例程以微秒为单位暂挂当前进程,而 nsleep 子例程以纳秒为单位暂挂当前进程。
在 AIX® 版本 5.1或更高版本中,时间以纳秒为单位。 nsleep 子例程是 AIX 操作系统用于暂挂线程执行的系统调用。 sleep 和 usleep 子例程充当 nsleep 子例程的前端。
暂挂进程的实际时间间隔是近似的。 由于系统调度的其他活动,暂挂进程的时间间隔可能需要较长时间,或者由于抢占暂挂的信号,进程暂挂可能需要较少时间。
对于 nsleep 子例程,必须指定 Rqtp (请求的时间暂停) 和 Rmtp (剩余时间暂停) 参数,以便可以确定暂挂进程的实际时间。 通常, Rmtp 参数中的值等效于零。 根据设计, Rqtp 参数中可能使用的最大值是一秒内的纳秒数。
示例
sleep (10)
返回值
如果所请求的时间已过去,那么 nsleep, sleep和 usleep 子例程将返回值 0。
如果nsleep子例程返回值为-1,则表示已收到信号或事件通知,Rmtp参数将更新为请求时间减去睡眠时间(未睡眠时间),并设置errno全局变量。
如果 sleep 子例程由于传递信号而返回过早的唤醒,那么返回值为未休眠量 (请求的时间减去休眠时间) (以秒为单位)。
错误代码
如果nsleep子例程失败,则返回值为-1并将errno全局变量设置为下列错误代码之一:
| 项 | 描述 |
|---|---|
| EINTR | 呼叫进程检测到信号,并且从信号捕获例程返回控制,或者通过事件通知函数通知进程事件。 |
| EINVAL | Rqtp 参数指定了小于零或大于或等于 1 秒的纳秒值。 |
| Efault | 引用了通知内存的参数地址。 注: errno 也可以设置为 Efault 。
|
sleep 子例程始终成功,并且不会保留任何返回值以指示错误。