CoDisableCallCancellation 関数 (combaseapi.h)
CoEnableCallCancellation の呼び出しの操作を元に戻します。 CoEnableCallCancellation へのすべての呼び出しが CoDisableCallCancellation の呼び出しによって分散されている場合に、呼び出し元スレッドでの同期呼び出しの取り消しを無効にします。
構文
HRESULT CoDisableCallCancellation(
[in, optional] LPVOID pReserved
);
パラメーター
[in, optional] pReserved
このパラメーターは予約されており、 NULL である必要があります。
戻り値
この関数は、E_FAIL、E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTEDの標準戻り値と、次の値を返すことができます。
リターン コード | 説明 |
---|---|
|
スレッドで呼び出しの取り消しが正常に無効にされました。 |
|
スレッドでの CoEnableCallCancellation の呼び出しは、 CoDisableCallCancellation の呼び出しよりも成功しています。 スレッドで取り消しは引き続き有効です。 |
解説
スレッドで呼び出しの取り消しが有効になっている場合、そのスレッドから同じコンピューター上のオブジェクトへの同期呼び出しをマーシャリングすると、パフォーマンスが大幅に低下する可能性があります。 既定では、cancel オブジェクトを使用できる場合でも、同期呼び出しを取り消すことはできません。 通話の取り消しを有効にするには、最初に CoEnableCallCancellation を 呼び出す必要があります。
呼び出しの取り消しが無効になっている場合、呼び出しオブジェクトへのポインターを取得しようとすると失敗します。 呼び出し元のスレッドに呼び出しオブジェクトへのポインターが既に存在する場合、そのオブジェクトの呼び出しは失敗します。
スレッドで呼び出しの取り消しを常に有効にしない限り、 CoEnableCallCancellation の呼び出しと CoDisableCallCancellation の呼び出しをペアにする必要があります。 呼び出しの取り消しは、 CoEnableCallCancellation への各正常な呼び出しが 、CoDisableCallCancellation の正常な呼び出しによってバランスが取れている場合にのみ無効になります。
呼び出しは、呼び出しが行われた時点のスレッドの状態に応じて取り消し可能であるか、取り消されません。 その後、呼び出しの取り消しを有効または無効にしても、スレッドで保留中の呼び出しには影響しません。
スレッドが初期化されておらず、 CoUninitialize と CoInitialize の呼び出しによって再初期化された場合、スレッドが初期化されていないときに有効にされた場合でも、スレッドの呼び出しの取り消しは無効になります。
要件
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | combaseapi.h (Objbase.h を含む) |
Library | Ole32.lib |
[DLL] | Ole32.dll |