# CmtTerminateThreadPoolThread

int CmtTerminateThreadPoolThread (int poolHandle, unsigned int threadID, int exitCode);

## Purpose

Terminates thread pool threads.

| Caution Use extreme caution when calling this function. Terminating a thread prevents it from properly freeing resources. Call this function only when you know exactly what operations the thread you want to terminate is performing. If you terminate a thread that is executing operating system code, your system could become unstable.

If you terminate a thread pool thread that is executing a Thread Function that is being waited on by other threads that called CmtWaitForThreadPoolFunctionCompletion, those threads do not receive notification that the Thread Function's thread has been terminated. The waiting threads wait indefinitely and are not destroyed until the process exits.

To safely terminate the thread, call CmtExitThreadPoolThread from within the thread that you want to terminate. If you need to initiate the exit from another thread, you can use PostDeferredCallToThread to notify the thread that it must exit. From within the thread pool thread, call CmtExitThreadPoolThread to ensure that the thread is returned to the pool safely. If your Thread Function does not process events, then your Thread Function must periodically check a flag that is set by another thread to indicate that your Thread Function must exit.

## Parameters

Input
Name | Type | Description
poolHandle | integer | The handle you obtained from CmtNewThreadPool to identify the thread pool. Pass DEFAULT_THREAD_POOL_HANDLE to specify the default thread pool.
threadID | unsigned integer | The threadID of the thread pool thread that you want to terminate. Call CmtGetThreadPoolFunctionAttribute with the ATTR_TP_FUNCTION_THREAD_ID attribute to obtain a thread pool thread's thread ID.
exitCode | integer | The exit code for the thread. If the thread is executing a Thread Function when you terminate it, you can call CmtGetThreadPoolFunctionAttribute with the ATTR_TP_FUNCTION_RETURN_VALUE attribute to retrieve the Exit Code from other threads. If the thread is idle in the pool when you terminate it, you can retrieve the exit code in other threads with the Windows SDK function GetExitCodeThread. Refer to the SDK documentation for more information.

## Return Value

Name | Type | Description
CmtStatus | integer | The CmtStatus code that the function call returns. This function returns 0 to indicate success and negative values to indicate failure. Pass the CmtStatus code to CmtGetErrorMessage to get a description of the error code.