摘要
等待多個物件的信號。
宣告
#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 已聲明有指定的信號。如果物件已
廣播至少一項指定的信號,等候時間就會立即結束,
ZX_OK
。
typedef struct {
zx_handle_t handle;
zx_signals_t waitfor;
zx_signals_t pending;
} zx_wait_item_t;
呼叫端必須在 items 陣列中提供計數 zx_wait_item_t
,
包含控制代碼和信號遮罩來等待每個項目。
每個項目都應具備有效的帳號代碼,可參照物件
等待,位元遮罩waitfor 會指出應喚醒哪些訊號
呼叫執行緒。
deadline 參數會指定與
ZX_CLOCK_MONOTONIC
,並根據工作
計時器滑桿政策。ZX_TIME_INFINITE
是特殊值,代表等待時間
。
傳回後,items 的 pending 欄位會填入點陣圖,指出 每個項目待處理的信號
可能等待的項目數量上限為 ZX_WAIT_MANY_MAX_ITEMS
個,
64。如要一次等待多個物件,請使用通訊埠。
權限
每個 items 項目都必須有一個包含 ZX_RIGHT_WAIT
的 handle 欄位。
傳回值
如有任何等待信號,zx_object_wait_many()
會傳回 ZX_OK
呼叫時處於啟用狀態,或之前在各自的物件中觀察到
期限。
在 ZX_ERR_TIMED_OUT
的情況下,items 可能會反映狀態變更
發生時間,但是在系統呼叫傳回之前。
發生 ZX_ERR_CANCELED
時,系統正在等待的一或多個項目
其控制代碼關閉,而這些項目的待處理欄位
會設定 ZX_SIGNAL_HANDLE_CLOSED
位元
至於任何其他傳回值,items 的 pending 欄位都不會定義。
錯誤
ZX_ERR_INVALID_ARGS
items 不是有效的指標。
ZX_ERR_OUT_OF_RANGE
count 大於 ZX_WAIT_MANY_MAX_ITEMS
。
ZX_ERR_BAD_HANDLE
其中一個項目包含無效的帳號代碼。
ZX_ERR_ACCESS_DENIED
提供的一或多個帳號代碼
可能處於 ZX_RIGHT_WAIT
,不能等待。
ZX_ERR_CANCELED
提供的一或多個帳號代碼無效
等待期間 (例如關閉)。
ZX_ERR_TIMED_OUT
指定的期限已超過任何指定期限
系統會在任何指定的控點上觀察信號,請注意,如果呼叫
0 的 count 則會等到期限過後才會傳回。
ZX_ERR_NOT_SUPPORTED
其中一個項目包含的帳號代碼無法
等候 1 部 (例如通訊埠控點)。
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。
使用者空間無法妥善處理這種 (異常) 錯誤。
在日後的版本中不會再發生這個錯誤。
錯誤
pending 應更正確地命名為「observ」。
附註
如要進一步瞭解信號及相關術語,請參閱信號。