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() 是封鎖的系統呼叫,會使呼叫端等到期限通過或項目中參照的一個物件已宣告指定的「信號」之後,再等待呼叫端。如果物件已聲明至少一個指定信號,等待作業會立即以 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,其中包含控制代碼和信號位元遮罩,以等待每個項目。每個項目都應包含一個有效的「控制代碼」,指的參照了要等待的物件,而位元遮罩 waitfor 用於指出應喚醒呼叫執行緒的信號。

deadline 參數會指定 ZX_CLOCK_MONOTONIC 的期限,並會根據工作的計時器封裝政策自動調整。ZX_TIME_INFINITE 是一種特殊值,表示無限期等待。

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

可能等待的項目數量上限為 ZX_WAIT_MANY_MAX_ITEMS,也就是 64 個。您可以使用「通訊埠」一次等待更多物件。

權限

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

傳回值

如果呼叫在呼叫時處於有效狀態,或在期限傳遞前在其個別物件上觀察到任何 waitforzx_object_wait_many() 會傳回 ZX_OK

ZX_ERR_TIMED_OUT 的事件中,items 可以反映在期限過後、系統傳回 syscall 之前發生的狀態變更。

ZX_ERR_CANCELED 事件中,一或多個等待中的項目控點已關閉,而這些項目的「pending」欄位則會設定 ZX_SIGNAL_HANDLE_CLOSED 位元。

針對其他傳回值,itemspending 欄位並未定義。

錯誤

ZX_ERR_INVALID_ARGS 項目不是有效的指標。

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:在任一指定控點發現任何指定信號之前,已超過指定期限。請注意,count 為 0 的呼叫仍會等到 deadline 通過後才會傳回。

ZX_ERR_NOT_SUPPORTED 其中一個項目包含無法等待的控制代碼 (例如通訊埠控制代碼)。

ZX_ERR_NO_MEMORY 因記憶體不足而失敗。使用者空間無法以任何方式處理這個錯誤 (極可能) 錯誤。日後的建構作業不會再發生這個錯誤。

錯誤

待處理應稱為「觀察到」

附註

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

另請參閱