zx_object_wait_multiple

摘要

等待多個物件的信號。

宣告

#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 是特殊值,代表等待時間 。

傳回後,itemspending 欄位會填入點陣圖,指出 每個項目待處理的信號

可能等待的項目數量上限為 ZX_WAIT_MANY_MAX_ITEMS 個, 64。如要一次等待多個物件,請使用通訊埠

權限

每個 items 項目都必須有一個包含 ZX_RIGHT_WAIThandle 欄位。

傳回值

如有任何等待信號,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 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」

附註

如要進一步瞭解信號及相關術語,請參閱信號

另請參閱