CoAddRefServerProcess 関数 (combaseapi.h)
プロセスごとのグローバル参照カウントをインクリメントします。
構文
ULONG CoAddRefServerProcess();
戻り値
現在の参照カウント。
注釈
サーバーは CoAddRefServerProcess を 呼び出して、グローバルなプロセスごとの参照カウントをインクリメントできます。 この関数は、複数のスレッド (マルチアパートメントまたはフリースレッド) で実装されているサーバーに特に役立ちます。 これらの型のサーバーは、複数のスレッドにわたるアクティブ化要求を使用してシャットダウンする決定を調整する必要があります。 CoAddRefServerProcess を呼び出すと、プロセスごとのグローバル参照カウントがインクリメントされ、CoReleaseServerProcess を呼び出すと、そのカウントがデクリメントされます。
この数が 0 に達すると、OLE は 自動的に CoSuspendClassObjects を呼び出します。これにより、新しいアクティブ化要求が送信されなくなります。 これにより、サーバーは、別のアクティブ化要求が入ってくる可能性があることを心配することなく、さまざまなスレッドからクラス オブジェクトを登録解除できます。 新しいアクティブ化要求により、ローカル サーバー プロセスの新しいインスタンスが起動されます。
ローカル サーバー アプリケーションでこれらの関数を使用する最も簡単な方法は、各インスタンス オブジェクトのコンストラクターで CoAddRefServerProcess を呼び出し、fLock パラメーターが TRUE の場合は各 IClassFactory::LockServer メソッドで呼び出す方法です。 また、サーバー アプリケーションは、各インスタンス オブジェクトの破棄時に CoReleaseServerProcess を呼び出し、fLock パラメーターが FALSE の場合は各 LockServer メソッドで呼び出す必要があります。 最後に、サーバー アプリケーションは CoReleaseServerProcess からのリターン コードに注意を払う必要があり、0 を返す場合、サーバー アプリケーションはクリーンアップを開始する必要があります。これは、複数のスレッドを持つサーバーの場合、通常、さまざまなスレッドにメッセージ ループを終了して CoRevokeClassObject と CoUninitialize を呼び出すように通知する必要があることを意味します。
これらの関数をまったく使用する場合は、オブジェクト インスタンスと LockServer メソッドの両方で呼び出す必要があります。そうしないと、サーバー アプリケーションが途中でシャットダウンされる可能性があります。 インプロセス サーバーでは、通常 、CoAddRefServerProcess または CoReleaseServerProcess を呼び出さないでください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | combaseapi.h (Objbase.h を含む) |
Library | Ole32.lib |
[DLL] | Ole32.dll |