摘要
將中斷物件繫結至通訊埠。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_interrupt_bind(zx_handle_t handle,
zx_handle_t port_handle,
uint64_t key,
uint32_t options);
說明
zx_interrupt_bind()
會將中斷的物件繫結或取消繫結至通訊埠。
中斷物件只能繫結至單一通訊埠,且只能繫結一次。
中斷情形只能繫結至使用 ZX_PORT_BIND_TO_INTERRUPT
建立的通訊埠
如果有需要 SQL 指令的分析工作負載
則 BigQuery 可能是最佳選擇
觸發已繫結中斷物件時,ZX_PKT_TYPE_INTERRUPT
封包會
傳送至繫結的通訊埠,時間戳記 (相對於 ZX_CLOCK_MONOTONIC
)
中斷 (在 zx_packet_interrupt_t
中觸發) 的時間點。使用的鍵
繫結期間會顯示於 zx_port_packet_t
的 key
欄位中。
如果繫結的中斷處於已觸發狀態,
系統會將 ZX_PKT_TYPE_INTERRUPT
封包傳送至中斷連線所在的通訊埠,
並觸發中斷情形的時間戳記。這個封包會需要
才能正常處理
在選項中繫結至通訊埠傳遞 ZX_INTERRUPT_BIND
。
如要取消繫結先前繫結的通訊埠,請傳遞「選項」中的 ZX_INTERRUPT_UNBIND
。如要解除繫結,
port_handle 是必要項目,但 key 會被忽略。取消繫結通訊埠會移除先前的設定
傳送至通訊埠的佇列封包
在傳送另一個封包之前,您必須使用
zx_interrupt_ack()
Syscall。在幾乎所有情況下,斷斷續續後會發揮最佳效果
確認封包已處理完畢尤其是在多個執行緒讀取資料的情況下
來自通訊埠的封包數,如果處理執行緒重回中斷狀態並遭到觸發,
系統會立即將封包傳送至等待執行緒。
中斷封包會透過通訊埠的專屬佇列傳遞,而且優先順序較高 非干擾封包的傳輸量
權限
handle 必須是 ZX_OBJ_TYPE_INTERRUPT
類型,且包含 ZX_RIGHT_READ
。
port_handle 必須是 ZX_OBJ_TYPE_PORT
類型,且包含 ZX_RIGHT_WRITE
。
傳回值
zx_interrupt_bind()
會在成功時傳回 ZX_OK
。活動
失敗時,系統會傳回負錯誤值。
錯誤
ZX_ERR_BAD_HANDLE
handle 或 port_handle 不是有效的帳號代碼。
ZX_ERR_WRONG_TYPE
handle 不是中斷物件,或 port_handle 不是通訊埠物件。
ZX_ERR_CANCELED
zx_interrupt_destroy()
已在帳號代碼上呼叫。
ZX_ERR_BAD_STATE
執行緒正在使用 zx_interrupt_wait()
等待中斷狀態
ZX_ERR_ACCESS_DENIED
帳號代碼缺少 ZX_RIGHT_READ
或 port_handle 控制代碼
缺少 ZX_RIGHT_WRITE
ZX_ERR_ALREADY_BOUND
此中斷物件已繫結。
ZX_ERR_INVALID_ARGS
選項不是 ZX_INTERRUPT_BIND
或 ZX_INTERRUPT_UNBIND
。
ZX_ERR_NOT_FOUND
這個通訊埠與繫結通訊埠不符。
另請參閱
zx_handle_close()
zx_interrupt_ack()
zx_interrupt_create()
zx_interrupt_destroy()
zx_interrupt_trigger()
zx_interrupt_wait()
zx_port_wait()