SetThreadpoolCallbackLibrary 関数 (winbase.h)
未処理のコールバックがある限り、指定した DLL が確実に読み込まれたままになります。
構文
void SetThreadpoolCallbackLibrary(
[in, out] PTP_CALLBACK_ENVIRON pcbe,
[in] PVOID mod
);
パラメーター
[in, out] pcbe
コールバック環境を定義する TP_CALLBACK_ENVIRON 構造体。 InitializeThreadpoolEnvironment 関数は、この構造体を返します。
[in] mod
DLL へのハンドル。
戻り値
なし
解説
コールバックがローダー ロックを取得する可能性がある場合は、この関数を呼び出す必要があります。 これにより、DllMain 内の 1 つのスレッドがコールバックの終了を待機していて、コールバックを実行している別のスレッドがローダー ロックの取得を試みたときにデッドロックが発生するのを防ぎます。
コールバックを含む DLL がアンロードされる可能性がある場合、DllMain のクリーンアップ コードは、オブジェクトを解放する前に未処理のコールバックを取り消す必要があります。
コールバック ライブラリを指定するTP_CALLBACK_ENVIRONを使用して作成されたコールバックの管理は、処理が多少集中します。 コールバックの実行中にライブラリがアンロードされないようにしたり、実行中のコールバックがローダー ロックを取得しないことを保証したりするための他のオプションを検討する必要があります。
スレッド プールは、この関数に指定されたライブラリ参照の所有権を前提としています。 呼び出し元は、この関数に渡した後、モジュール ハンドルで FreeLibrary を呼び出さないでください。
この関数はインライン関数として実装されます。
この関数を使用するアプリケーションをコンパイルするには、_WIN32_WINNTを 0x0600 以上として定義します。
要件
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | winbase.h (Windows.h を含む) |
関連項目
FreeLibraryWhenCallbackReturns
InitializeThreadpoolEnvironment