次の方法で共有


TpSetCallbackRaceWithDll 関数 (winnt.h)

未処理のコールバックがある限り、指定した DLL が確実に読み込まれたままになります。

構文

void TpSetCallbackRaceWithDll(
  [in, out] PTP_CALLBACK_ENVIRON CallbackEnviron,
  [in]      PVOID                DllHandle
);

パラメーター

[in, out] CallbackEnviron

コールバック環境を定義する TP_CALLBACK_ENVIRON 構造体。 InitializeThreadpoolEnvironment 関数は、この構造体を返します。

[in] DllHandle

DLL へのハンドル。

戻り値

なし

解説

コールバックがローダー ロックを取得する可能性がある場合は、この関数を呼び出す必要があります。 これにより、DllMain 内の 1 つのスレッドがコールバックの終了を待機していて、コールバックを実行している別のスレッドがローダー ロックの取得を試みたときにデッドロックが発生するのを防ぎます。

コールバックを含む DLL がアンロードされる可能性がある場合、DllMain のクリーンアップ コードは、オブジェクトを解放する前に未処理のコールバックを取り消す必要があります。

コールバック ライブラリを指定するTP_CALLBACK_ENVIRONを使用して作成されたコールバックの管理は、処理が多少集中します。 コールバックの実行中にライブラリがアンロードされないようにしたり、実行中のコールバックがローダー ロックを取得しないことを保証したりするための他のオプションを検討する必要があります。

この関数はインライン関数として実装されます。

要件

   
対象プラットフォーム Windows
ヘッダー winnt.h

関連項目

TpDestroyCallbackEnviron

TpInitializeCallbackEnviron

TpSetCallbackActivationContext

TpSetCallbackCleanupGroup

TpSetCallbackFinalizationCallback

TpSetCallbackLongFunction

TpSetCallbackNoActivationContext

TpSetCallbackPersistent

TpSetCallbackPriority

TpSetCallbackThreadpool