Поделиться через


Функция CoAddRefServerProcess (combaseapi.h)

Увеличивает глобальное число ссылок на процесс.

Синтаксис

ULONG CoAddRefServerProcess();

Возвращаемое значение

Текущее число ссылок.

Комментарии

Серверы могут вызывать CoAddRefServerProcess для увеличения глобального количества ссылок на процесс. Эта функция особенно полезна для серверов, реализованных с несколькими потоками, как с несколькими подразделениями, так и с помощью свободного потока. Серверы этих типов должны координировать решение о завершении работы с запросами активации в нескольких потоках. Вызов CoAddRefServerProcess увеличивает глобальное число ссылок на процесс, а вызов CoReleaseServerProcess уменьшает это значение.

Когда это число достигает нуля, OLE автоматически вызывает CoSuspendClassObjects, что предотвращает новые запросы активации. Это позволяет серверу отменять регистрацию объектов класса из различных потоков, не беспокоясь о том, что может прийти другой запрос на активацию. Новые запросы на активацию приводят к запуску нового экземпляра процесса локального сервера.

Самый простой способ использования этих функций локальным серверным приложением — вызвать CoAddRefServerProcess в конструкторе для каждого из объектов экземпляра и в каждом из методов IClassFactory::LockServer , если параметр flock имеет значение TRUE. Серверное приложение также должно вызывать CoReleaseServerProcess при уничтожении каждого объекта экземпляра и в каждом из методов LockServer , если параметр flock имеет значение FALSE. Наконец, серверное приложение должно обратить внимание на код возврата из CoReleaseServerProcess , и если оно возвращает 0, серверное приложение должно инициировать его очистку, что для сервера с несколькими потоками, как правило, означает, что оно должно сигнализировать своим различным потокам о выходе из циклов сообщений и вызове CoRevokeClassObject и CoUninitialize.

Если эти функции используются вообще, они должны вызываться как в экземплярах объектов, так и в методе LockServer , в противном случае серверное приложение может быть преждевременно закрыто. Внутрипроцессные серверы обычно не должны вызывать CoAddRefServerProcess или CoReleaseServerProcess.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header combaseapi.h (включая Objbase.h)
Библиотека Ole32.lib
DLL Ole32.dll

См. также раздел

CoReleaseServerProcess

IClassFactory::LockServer

Вспомогательные функции внепроцессной реализации сервера