zx_task_suspend

摘要

暫停指定工作。目前只有執行緒或程序帳號可能遭到停權。

宣告

#include <zircon/syscalls.h>

zx_status_t zx_task_suspend(zx_handle_t handle, zx_handle_t* token);

說明

zx_task_suspend() 會暫停要求的工作 未同步暫停工作,因此工作可能不會 暫停狀態。即將暫停這項工作 叫用 zx_task_suspend() 後,除非使用者目前在 在這種情況下,核心會在解除封鎖後暫停。

在開始之前,您可以暫停和/或恢復工作。如果工作 因此在執行任何程式碼前,會進入暫停狀態。 同樣地,在已暫停的處理程序中啟動新的執行緒,也會暫停執行緒 再執行任何程式碼

如果對已暫停的工作叫用 zx_task_kill(),就會成功終止工作 執行工作

工作不可暫停自己或其任何父項工作 接收暫停權杖,且無法繼續執行作業。

恢復中

如要允許工作繼續,請關閉暫停權杖控制代碼。工作 就會維持在停權狀態。就像暫停一樣 恢復為非同步狀態,因此當執行緒呼叫時,執行緒可能並非處於執行中狀態。 即使沒有其他暫停權杖,zx_handle_close() 呼叫也會傳回 已開啟。

信號與例外情況

執行緒可以斷言下列兩種相關信號:

  • ZX_THREAD_RUNNING
  • ZX_THREAD_SUSPENDED

除非透過 zx_process_start()zx_thread_start()。時間 執行緒開始後,會宣告 ZX_THREAD_RUNNING 是否已暫停 或不可以,但如果遭停權,則會切換為 ZX_THREAD_SUSPENDED 再執行任何程式碼

ZX_EXCP_PROCESS_STARTINGZX_EXCP_THREAD_STARTING 偵錯 不論工作是否暫停,系統都會在開始時傳送例外狀況。

權限

handle 必須是 ZX_OBJ_TYPE_THREADZX_OBJ_TYPE_PROCESS 類型,且具有 ZX_RIGHT_WRITE

傳回值

zx_task_suspend() 會在成功時傳回 ZX_OK。 如果失敗,系統會傳回負的錯誤值。

錯誤

ZX_ERR_BAD_HANDLE 帳號代碼不是有效的帳號代碼。

ZX_ERR_WRONG_TYPE 處理常式不是執行緒或程序控制代碼。

ZX_ERR_INVALID_ARGS token 是無效的指標。

ZX_ERR_BAD_STATE 工作已經終止或死亡,無法暫停。

ZX_ERR_NO_MEMORY 無法分配記憶體。

ZX_ERR_NOT_SUPPORTED 呼叫執行緒嘗試自行暫停,或 其中一種父項工作

限制

目前僅支援執行緒和程序帳號。