摘要
在執行緒上啟動。
宣告
#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 會排列在執行緒開始之前,函式呼叫前兩個引數使用的架構專屬登錄中。所有其他暫存器的註冊數一律為 0。
關閉執行緒的最後一個帳號代碼時,該執行緒就會遭到刪除。
執行緒控點可能會等待,並在執行緒停止執行時宣告信號 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();
}
如未在達到函式末端之前呼叫其中一個結束函式,將會導致架構 / 工具鍊的特定例外狀況發生。
權限
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
執行緒 還不能執行,或是程序執行緒已不再運作。
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()