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 的其他使用者。
線程無法藉由控制其句柄的存取,來防止 TerminateThread 本身。 CreateThreadCreateProcess 函式所傳回的線程句柄具有THREAD_TERMINATE存取權,因此持有其中一個句柄的任何呼叫端都可以終止線程。

如果呼叫此函式時,目標線程是進程的最後一個線程,則線程的進程也會終止。

線程物件的狀態會變成訊號,釋放任何其他等候線程終止的線程。 線程的終止狀態會從 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

另請參閱

CreateProcess

CreateThread

ExitThread

GetExitCodeThread

OpenThread

處理序和執行緒函式

終止線程

執行緒