摘要
等待物件上的信號。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_object_wait_one(zx_handle_t handle,
zx_signals_t signals,
zx_time_t deadline,
zx_signals_t* observed);
說明
zx_object_wait_one()
是封鎖的系統呼叫,會使呼叫端等待直到「期限」通過,或是「處理常式」所參照的至少一個信號 (由位元遮罩「信號」指定) 為止。如果物件已聲明至少一個指定的信號,等待時間會立即以 ZX_OK
結束。
傳回時,如果非 NULL,則 obrow 是物件上宣告的「所有」信號點陣圖。如果其中一個指定的信號已宣告,「觀察中」將是初次宣告指定信號時宣告的信號組合。否則,如果「期限」通過或「控制代碼」關閉,「觀測到」將包含 zx_object_wait_one
系統呼叫完成時的物件信號狀態。
deadline 參數會指定 ZX_CLOCK_MONOTONIC
的期限,並會根據工作的計時器封裝政策自動調整。
ZX_TIME_INFINITE
是一個特殊值,表示永久等待。ZX_TIME_INFINITE_PAST
(或ZX_CLOCK_MONOTONIC
中目前時間之前的任何值) 會查詢信號目前的值。
權限
handle 必須具有 ZX_RIGHT_WAIT
。
傳回值
如果呼叫發生時在呼叫 期限,或在物件上觀察到任何信號,zx_object_wait_one()
會傳回 ZX_OK
。
在 ZX_ERR_TIMED_OUT
事件中,「觀察到」可以反映在期限過後、系統傳回 syscall 之前發生的狀態變更。
在 ZX_ERR_CANCELED
事件中,控制代碼已關閉,而「Observed」將設定 ZX_SIGNAL_HANDLE_CLOSED
位元。
其他傳回值不會定義 Observed。
錯誤
ZX_ERR_INVALID_ARGS
「觀察到」是無效指標。
ZX_ERR_BAD_HANDLE
帳號代碼不是有效的帳號代碼。
ZX_ERR_ACCESS_DENIED
「處理常式」沒有 ZX_RIGHT_WAIT
,因此可能不會等待。
ZX_ERR_CANCELED
帳號代碼在等待期間失效 (例如已結束)。
ZX_ERR_TIMED_OUT
在「帳號代碼」上觀察到任何指定信號之前,超過指定期限。
ZX_ERR_NOT_SUPPORTED
處理常式是無法等待的控制代碼 (例如通訊埠控制代碼)。
附註
如要進一步瞭解信號及其術語,請參閱信號。