ExitThread 関数 (processthreadsapi.h)

呼び出し元のスレッドを終了します。

構文

void ExitThread(
  [in] DWORD dwExitCode
);

パラメーター

[in] dwExitCode

スレッドの終了コード。

戻り値

なし

解説

ExitThread は、C コードでスレッドを終了する場合に推奨される方法です。 ただし、C++ コードでは、デストラクターを呼び出したり、その他の自動クリーンアップを実行したりする前に、スレッドが終了します。 したがって、C++ コードでは、スレッド関数から を返す必要があります。

この関数が呼び出されると (明示的に、またはスレッド プロシージャから戻ります)、現在のスレッドのスタックの割り当てが解除され、完了ポートに関連付けられていないスレッドによって開始されたすべての保留中の I/O が取り消され、スレッドが終了します。 アタッチされているすべてのダイナミック リンク ライブラリ (DLL) のエントリ ポイント関数が、スレッドが DLL からデタッチされていることを示す値を使用して呼び出されます。

この関数が呼び出されたときにスレッドがプロセスの最後のスレッドである場合、スレッドのプロセスも終了します。

スレッド オブジェクトの状態が通知され、スレッドの終了を待機していた他のスレッドが解放されます。 スレッドの終了状態は、STILL_ACTIVE から dwExitCode パラメーターの値に変わります。

スレッドを終了しても、必ずしもオペレーティング システムからスレッド オブジェクトが削除されるとは限りません。 スレッド オブジェクトは、スレッドへの最後のハンドルが閉じられると削除されます。

ExitProcessExitThreadCreateThreadCreateRemoteThread 関数、および (CreateProcess 呼び出しの結果として) 開始されるプロセスは、プロセス内で相互にシリアル化されます。 これらのイベントのうち、一度に 1 つのアドレス空間で発生できるイベントは 1 つだけです。 つまり、次の制限が保持されます。

  • プロセスの起動および DLL 初期化ルーチン中に、新しいスレッドを作成できますが、プロセスに対して DLL の初期化が行われるまで実行は開始されません。
  • プロセス内のスレッドは、一度に 1 つの DLL 初期化またはデタッチ ルーチンに含めることができます。
  • ExitProcess は、DLL 初期化ルーチンまたはデタッチ ルーチンにスレッドが存在しない限り、戻りません。
静的 C ランタイム ライブラリ (CRT) にリンクされている実行可能ファイル内のスレッドでは、CreateThreadExitThread ではなく、スレッド管理に_beginthread_endthreadを使用する必要があります。 これを行わないと、スレッドが ExitThread を呼び出すときにメモリ リークが小さくなります。 もう 1 つの回避策は、静的 CRT ではなく DLL 内の CRT に実行可能ファイルをリンクすることです。 このメモリ リークは、DLL が静的 CRT にリンクされていて、スレッドが DisableThreadLibraryCalls 関数を呼び出した場合にのみ、DLL から発生します。 それ以外の場合は、静的 CRT にリンクする DLL 内のスレッドから CreateThreadExitThread を呼び出しても安全です。

GetExitCodeThread 関数を使用して、スレッドの終了コードを取得します。

Windows Phone 8.1: この関数は、Windows Phone 8.1 以降のWindows Phone ストア アプリでサポートされています。

Windows 8.1Windows Server 2012 R2: この関数は、Windows 8.1、Windows Server 2012 R2 以降の Windows ストア アプリでサポートされています。

例については、「 イベント オブジェクトの使用」を参照してください。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー processthreadsapi.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 の Windows.h を含む)
Library Kernel32.lib;Windows Phone 8.1 の WindowsPhoneCore.lib
[DLL] Kernel32.dll;Windows Phone 8.1 での KernelBase.dll

関連項目

CreateProcess

CreateRemoteThread

CreateThread

ExitProcess

FreeLibraryAndExitThread

GetExitCodeThread

OpenThread

プロセス関数とスレッド関数

TerminateThread

スレッド