zx_object_wait_one
名称
object_wait_many —— 等待单个对象发出的信号
概要
#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);
描述
object_wait_one() 是一个阻塞式的系统调用,它的目的是使调用者等待直到截止时刻deadline的到来,或者signals中至少有一个指定的信号被句柄所引用的对象所置位。 如果对象已经在signals中至少一个指定信号上置位,则等待立即返回。
在返回时,如果observed为非NULL
,则它是所有等待的该对象上所有已置位信号的位图(bitmap)。
如果对象的状态被另一个线程或进程修改,则observed中的pending信号可能无法反映对象信号的实际状态。 (例如,一旦队列中的最后一条消息被读取,通道就会停止在ZX_CHANNEL_READABLE上置位)
deadline参数指定了相对于ZX_CLOCK_MONOTONIC的截止时刻。 而ZX_TIME_INFINITE参数是一个特殊的值,它表示永远等待。
权限
TODO(ZX-2399)
返回值
如果在deadline截至时刻到来之前,在对象上观察到任何signals信号中的一个,则object_wait_one() 返回ZX_OK。
即使调用返回ZX_ERR_TIMED_OUT,observed也会反映出在截止时刻到来之后但在系统调用返回之前发生的状态更改。
对于任何其他返回值,observed均是未定义的。
错误码
ZX_ERR_INVALID_ARGS:observe是无效指针。
ZX_ERR_BAD_HANDLE:handle是无效句柄。
ZX_ERR_ACCESS_DENIED:handle没有ZX_RIGHT_WAIT权限,因此无法被用于等待。
ZX_ERR_CANCELED:handle在等待期间失效(例如关闭)。
ZX_ERR_TIMED_OUT:指定的截止时刻超时发生在,句柄handle上等待到signals中任何信号之前。
ZX_ERR_NOT_SUPPORTED:handle其中一项包含不可等待的句柄(例如端口句柄等)。