总结
等待对象上的信号。
声明
#include <zircon/syscalls.h>
zx_status_t zx_object_wait_one(zx_handle_t handle,
zx_signals_t signals,
zx_time_t deadline,
zx_signals_t* observed);
说明
zx_object_wait_one()
是一种阻塞系统调用,会使调用方一直等到最后期限过去,或处理程序引用的对象断言至少一个由位掩码信号指定的信号后再执行。如果对象已在断言至少一个指定的信号,则等待会立即结束并显示 ZX_OK
。
返回时,如果其非 NULL,则观察到的是一个位图,其中包含针对该对象断言的所有信号。如果断言了其中一个指定的信号,观测到的将是首次断言指定信号时断言的一组信号。否则,如果 deadline 传递或 handle 关闭,观察对象将包含 zx_object_wait_one
系统调用完成时对象的信号状态。
deadline 参数指定相对于 ZX_CLOCK_MONOTONIC
的截止时间,它将根据作业的计时器 Slack 政策自动调整。
ZX_TIME_INFINITE
是一个特殊值,表示永久等待。ZX_TIME_INFINITE_PAST
(或ZX_CLOCK_MONOTONIC
中当前时间之前的任何值)将查询信号的当前值。
权限
handle 必须具有 ZX_RIGHT_WAIT
。
返回值
如果任何信号在调用时处于活跃状态,或在截止期限通过之前在对象上观察到,zx_object_wait_one()
则返回ZX_OK
。
如果发生 ZX_ERR_TIMED_OUT
,观察到的可能反映了在截止时间过后,但在系统调用返回之前发生的状态更改。
在 ZX_ERR_CANCELED
事件中,handle 已关闭,而 observer 将设置 ZX_SIGNAL_HANDLE_CLOSED
位。
对于任何其他返回值,obified 都未定义。
错误
观察到的 ZX_ERR_INVALID_ARGS
是无效的指针。
ZX_ERR_BAD_HANDLE
句柄不是有效的句柄。
ZX_ERR_ACCESS_DENIED
句柄没有 ZX_RIGHT_WAIT
,因此可能不会等待。
ZX_ERR_CANCELED
句柄在等待期间已失效(例如,已关闭)。
ZX_ERR_TIMED_OUT
:在 handle 上观察到任何指定信号之前经过的指定截止时限。
ZX_ERR_NOT_SUPPORTED
句柄是一个无法等待的句柄(例如,端口句柄)。
备注
如需详细了解信号及其术语,请参阅信号。