TerminateThread 関数 (processthreadsapi.h)
スレッドを終了します。
構文
BOOL TerminateThread(
[in, out] HANDLE hThread,
[in] DWORD dwExitCode
);
パラメーター
[in, out] hThread
終了するスレッドへのハンドル。
ハンドルには、 THREAD_TERMINATE アクセス権が必要です。 詳細については、「 スレッド セキュリティとアクセス権」を参照してください。
[in] dwExitCode
スレッドの終了コード。 GetExitCodeThread 関数を使用して、スレッドの終了値を取得します。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、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 の Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |