zx_object_wait_MANY

摘要

等待多个对象上的信号。

声明

#include <zircon/syscalls.h>

zx_status_t zx_object_wait_many(zx_wait_item_t* items,
                                size_t num_items,
                                zx_time_t deadline);

说明

zx_object_wait_many() 是会导致调用方等待的阻塞系统调用 直到最后期限过后,或 items 已断言指定的 signal。如果已有对象 至少断言其中一个指定信号时,等待立即结束 ZX_OK

typedef struct {
    zx_handle_t handle;
    zx_signals_t waitfor;
    zx_signals_t pending;
} zx_wait_item_t;

调用方必须在 items 数组中提供 count zx_wait_item_t, 包含句柄和信号位掩码以等待每项内容。 每个项都应包含引用一个对象的有效 handle 以及一个位掩码 waitfor,用于指示应唤醒哪些信号 调用线程。

deadline 参数用于指定与以下日期相关的截止期限: ZX_CLOCK_MONOTONIC,系统会根据作业的 计时器延迟政策。ZX_TIME_INFINITE 是一个特殊值,表示等待 无限可能。

返回后,itemspending 字段会填充为位图,表示 各个项的待处理信号

可以等待的条目数上限为 ZX_WAIT_MANY_MAX_ITEMS, 也就是 64如需一次等待更多对象,请使用端口

权限

每个 items 条目都必须包含一个带有 ZX_RIGHT_WAIThandle 字段。

返回值

如果任一 waitfor 信号发生以下情况,zx_object_wait_many() 会返回 ZX_OK: 在进行调用时处于活动状态,或者之前在各自对象上观察到 截止日期已过。

如果为 ZX_ERR_TIMED_OUT,则 items 可能会反映状态更改 发生的事件。

如果为 ZX_ERR_CANCELED,则等待的一个或多个项目 以及这些内容的待处理字段 将设置 ZX_SIGNAL_HANDLE_CLOSED 位。

对于任何其他返回值,itemspending 字段均未定义。

错误

ZX_ERR_INVALID_ARGS items 不是有效的指针。

ZX_ERR_OUT_OF_RANGE 计数大于 ZX_WAIT_MANY_MAX_ITEMS

ZX_ERR_BAD_HANDLEitems 中有一项包含无效的句柄。

ZX_ERR_ACCESS_DENIED提供的一个或多个标识名不是 具有ZX_RIGHT_WAIT,不能等待。

ZX_ERR_CANCELED提供的一个或多个标识名已失效 (例如已关闭)。

ZX_ERR_TIMED_OUT:指定的截止时间早于指定的截止时间的 信号。请注意,使用 count 为 0 时,系统仍会等到 deadline 过去后再返回。

ZX_ERR_NOT_SUPPORTED 其中一个包含的句柄 等待一个(例如,端口句柄)。

ZX_ERR_NO_MEMORY 因内存不足而失败。 用户空间没有好办法处理这种(不太可能)错误。 在将来的版本中,此错误不会再发生。

错误

更恰当地将 pending 称为 observ

备注

如需详细了解信号及其术语,请参阅信号

另请参阅