zx_break_bind

摘要

將中斷物件繫結至通訊埠。

宣告

#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_tkey 欄位中。

如果繫結的中斷處於已觸發狀態, 系統會將 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 handleport_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_READport_handle 控制代碼 缺少 ZX_RIGHT_WRITE

ZX_ERR_ALREADY_BOUND 此中斷物件已繫結。

ZX_ERR_INVALID_ARGS 選項不是 ZX_INTERRUPT_BINDZX_INTERRUPT_UNBIND

ZX_ERR_NOT_FOUND 這個通訊埠與繫結通訊埠不符。

另請參閱