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_instant_mono_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 陣列中提供 count zx_wait_item_t,其中包含要等待每個項目的控制代碼和信號位元遮罩。每個項目都應包含參照要等待物件的有效 handle,以及指出哪些信號應喚醒呼叫執行緒的位元遮罩 waitfor

deadline 參數會指定相對於 ZX_CLOCK_MONOTONIC 的期限,並根據工作的計時器延遲政策自動調整。ZX_TIME_INFINITE 是特殊值,代表無限期等待。

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

可等待的項目數量上限為 ZX_WAIT_MANY_MAX_ITEMS,即 64。如要一次等待更多物件,請使用「連接埠」

權限

「items」的每個項目都必須包含「handle」欄位,且該欄位的值為 ZX_RIGHT_WAIT

傳回值

如果呼叫時有任何 waitfor 信號處於啟用狀態,或在 deadline 經過前觀察到各自的物件,zx_object_wait_many() 會傳回 ZX_OK

如果發生 ZX_ERR_TIMED_OUT項目可能會反映截止日期過後,但在系統呼叫傳回前發生的狀態變更。

如果發生 ZX_ERR_CANCELED,表示一或多個等待中的項目已關閉控點,且這些項目的 pending 欄位會設為 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 在任何指定控制代碼上觀察到任何指定信號之前,指定的期限已過。請注意,即使 count 為 0,呼叫仍會等到 deadline 經過後才傳回。

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

ZX_ERR_NO_MEMORY 記憶體不足,因此失敗。 使用者空間無法妥善處理這項 (不太可能發生的) 錯誤。 這個錯誤不會出現在日後的版本中。

BUGS

待處理更適合稱為已觀察

附註

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

另請參閱