摘要
暫停指定工作。目前只能暫停執行緒或程序帳號代碼。
宣告
#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_STARTING
和 ZX_EXCP_THREAD_STARTING
偵錯例外狀況。
權限
handle 必須是 ZX_OBJ_TYPE_THREAD
或 ZX_OBJ_TYPE_PROCESS
類型,且具有 ZX_RIGHT_WRITE
。
傳回值
zx_task_suspend()
會在成功時傳回 ZX_OK
。如果失敗,系統會傳回負值錯誤值。
錯誤
ZX_ERR_BAD_HANDLE
帳號代碼不是有效的帳號代碼。
ZX_ERR_WRONG_TYPE
處理常式並非執行緒或程序控點。
ZX_ERR_INVALID_ARGS
符記是無效指標。
ZX_ERR_BAD_STATE
工作已在死亡或已失效,因此無法暫停。
ZX_ERR_NO_MEMORY
無法分配記憶體。
ZX_ERR_NOT_SUPPORTED
呼叫執行緒嘗試將自身或其中一個父項工作暫停。
限制
目前僅支援執行緒和程序控點。