TerminateThread 函式 (processthreadsapi.h)
終止線程。
語法
BOOL TerminateThread(
[in, out] HANDLE hThread,
[in] DWORD dwExitCode
);
參數
[in, out] hThread
要終止之線程的句柄。
句柄必須具有 THREAD_TERMINATE 訪問許可權。 如需詳細資訊,請參閱 線程安全性和訪問許可權。
[in] dwExitCode
線程的結束代碼。 使用 GetExitCodeThread 函式來擷取線程的結束值。
傳回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
TerminateThread 可用來讓線程結束。 發生這種情況時,目標線程無法執行任何使用者模式程序代碼。 附加至線程的 DLL 不會收到線程終止的通知。 系統會釋放線程的初始堆疊。
Windows Server 2003 和 Windows XP: 不會釋放目標線程的初始堆疊,導致資源流失。
TerminateThread 是一種危險函式,只應用於最極端的情況。 只有在您知道目標線程執行什麼事,而且控制目標線程可能會在終止時執行的所有程式代碼時,才應該呼叫 TerminateThread 。 例如, TerminateThread 可能會導致下列問題:
- 如果目標線程擁有重要區段,將不會釋放關鍵區段。
- 如果目標線程從堆積配置記憶體,將不會釋放堆積鎖定。
- 如果目標線程在終止時執行特定 kernel32 呼叫,線程進程的 kernel32 狀態可能會不一致。
- 如果目標線程正在操作共用 DLL 的全域狀態,DLL 的狀態可能會終結,而影響 DLL 的其他使用者。
如果呼叫此函式時,目標線程是進程的最後一個線程,則線程的進程也會終止。
線程物件的狀態會變成訊號,釋放任何其他等候線程終止的線程。 線程的終止狀態會從 STILL_ACTIVE 變更為 dwExitCode 參數的值。
終止線程不一定會從系統移除線程物件。 關閉最後一個線程句柄時,就會刪除線程物件。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | processthreadsapi.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |