摘要
在執行緒上開始執行作業。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_thread_start(zx_handle_t handle,
zx_vaddr_t thread_entry,
zx_vaddr_t stack,
uintptr_t arg1,
uintptr_t arg2);
說明
zx_thread_start()
會使執行緒在程式計數器上開始執行
由 thread_entry 指定,並將堆疊指標設為 stack。
引數 arg1 和 arg2 取至特定架構
會註冊用於函式呼叫的前兩個引數
已開始。其他暫存器開始時即為零。
當執行緒的最後一個控制代碼關閉時,系統就會刪除執行緒。
執行緒帳號代碼可能會等候,並會斷言訊號
執行緒停止執行時的 ZX_THREAD_TERMINATED
(因為
zx_thread_exit()
)。
thread_entry 應指向必須呼叫 zx_thread_exit()
或
zx_futex_wake_handle_close_thread_exit()
或
zx_vmar_unmap_handle_close_thread_exit()
,再繼續進行最後一個指示。
範例如下:
void thread_entry(uintptr_t arg1, uintptr_t arg2) __attribute__((noreturn)) {
// do work here.
zx_thread_exit();
}
無法在網頁結尾前呼叫其中一個 exit 函式 這項函式會導致架構 / 工具鍊特有的例外狀況。
權限
handle 必須是 ZX_OBJ_TYPE_THREAD
類型,且包含 ZX_RIGHT_MANAGE_THREAD
。
傳回值
zx_thread_start()
會在成功時傳回 ZX_OK
。
如果失敗,系統會傳回負的錯誤值。
錯誤
「ZX_ERR_BAD_HANDLE
」執行緒不是有效的帳號代碼。
ZX_ERR_WRONG_TYPE
執行緒不是執行緒處理常式。
ZX_ERR_ACCESS_DENIED
處理常式執行緒缺少 ZX_RIGHT_WRITE
。
ZX_ERR_BAD_STATE
thread 尚未準備好執行,或程序 Thread
的部分內容已失效。
ZX_ERR_INVALID_ARGS
thread_entry 不是使用者空間位址,也不是
或不是 0
標準網址。
另請參閱
zx_futex_wake_handle_close_thread_exit()
zx_handle_close()
zx_handle_duplicate()
zx_object_wait_async()
zx_object_wait_many()
zx_object_wait_one()
zx_thread_create()
zx_thread_exit()
zx_vmar_unmap_handle_close_thread_exit()