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


Отделения

Типы секций

Существует несколько различных типов отсеков. Существует глобальный отсек, и каждый диспетчер потоков, диспетчер документов и контекст могут содержать секцию.

Глобальный отсек позволяет клиентам обмениваться данными между процессами. Чтобы получить глобальный диспетчер секций, вызовите ITfThreadMgr::GetGlobalCompartment.

Диспетчер потоков содержит диспетчер секций, содержащий секции на основе потока. Это позволяет совместно использовать данные в потоке. Чтобы получить диспетчер секций диспетчера потоков, вызовите ITfThreadMgr::QueryInterface с IID_ITfCompartmentMgr.

Каждый созданный диспетчер документов также содержит диспетчер секций. Это позволяет совместно использовать данные в определенном диспетчере документов. Чтобы получить диспетчер секций диспетчера документов, вызовите ITfDocumentMgr::QueryInterface с IID_ITfCompartmentMgr.

Каждый созданный контекст также содержит диспетчер секций. Это позволяет совместно использовать данные в определенном контексте. Чтобы получить диспетчер секции контекста, вызовите ITfContext::QueryInterface с IID_ITfCompartmentMgr.

Создание и удаление отсека

В первый раз создается отсек ITfCompartmentMgr::GetCompartment вызывается с идентификатором GUID секции. Клиент установки должен задать начальное значение отсека с помощью ITfCompartment::SetValue. Пока не задано значение, значение секции пусто. Из-за этого не существует способа проверить, существует ли отсек до вызова GetCompartment. Чтобы избежать этой ситуации, клиент установки должен установить значение на некоторое начальное значение, чтобы другие клиенты могли определить, существует ли отсек.

Метод ITfCompartmentMgr::ClearCompartment используется для удаления отсека. Все существующие ссылки на секцию помечены как недопустимые.

Получение секций

Используя интерфейсITfCompartmentMgrITfCompartmentMgr, клиент может перечислить секции, вызвав ITfCompartmentMgr::EnumCompartments. Этот метод предоставляет объект IEnumGUID, содержащий идентификаторы GUID всех установленных отсеков.

С помощью GUID секции ITfCompartmentMgr::GetCompartment используется для получения определенного отсека. Этот метод предоставляет вызывающий объект с объектом ITfCompartment, который может получить и задать данные секции.

Получение уведомлений об изменении отсека

При изменении значения отсека диспетчер TSF уведомляет все установленные приемники о том, что отсек изменился. Чтобы установить приемник изменения секции, создайте объект, реализующий ITfCompartmentEventSink. Затем вызовите ITfCompartment::QueryInterface с IID_ITfSource в объекте секции, чтобы получить интерфейс ITfSource. Теперь вызовите ITfSource::AdviseSink с IID_ITfCompartmentEventSink и указатель на объект ITfCompartmentEventSink. При изменении значения отсека вызывается приемника ITfCompartmentEventSink::OnChange с GUID отсека. Приемник советов может вызывать ITfCompartment::GetValue для получения нового значения.

ITfCompartmentMgr

ITfCompartment

ITfCompartmentEventSink

TfClientId

ITfThreadMgr::GetGlobalCompartment

ITfCompartmentMgr::GetCompartment

ITfCompartment::SetValue

ITfCompartmentMgr::ClearCompartment

ITfCompartmentMgr::EnumCompartments

ITfSource

ITfSource::AdviseSink

ITfCompartmentEventSink::OnChange