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


Интерфейс IClosable (windows.foundation.h)

Определяет метод освобождения распределенных ресурсов.

Наследование

Интерфейс IClosable наследуется от интерфейса IInspectable . IClosable также имеет следующие типы элементов:

Методы

Интерфейс IClosable содержит следующие методы.

 
IClosable::Close

Выполняет определяемые приложением задачи, связанные с освобождением, освобождением или сбросом выделенных ресурсов.

Комментарии

Используйте интерфейс IClosable для управления временем существования системных ресурсов, таких как дескрипторы файлов и сетевые сокеты, которые используются объектом среда выполнения Windows.

Некоторые системные ресурсы используются исключительно одним фрагментом кода и должны быть освобождены, прежде чем другой код сможет их использовать. Например, открытие файла для чтения и записи не позволяет другому коду открыть тот же файл для чтения и записи, поэтому код, открывший файл, должен закрыть дескриптор файла, прежде чем другой код сможет открыть его.

Другие системные ресурсы не используются исключительно. Многие аппаратные устройства, такие как датчики, геолокация, SMS и переносные устройства, могут открываться несколько раз в одном или нескольких приложениях.

Интерфейс IClosable позволяет управлять эксклюзивными системными ресурсами. При вызове метода Close для объекта среда выполнения Windows объект освобождает свои системные ресурсы, чтобы они были доступны для использования другим кодом. Объекты, использующие только общие системные ресурсы, такие как память и устройства с общим доступом, не реализуют IClosable.

При реализации метода Close в объекте среда выполнения Windows код должен освободить все ресурсы монопольного использования, которые он содержит. Если объект имеет ссылки на другие закрываемые среда выполнения Windows объекты, он должен вызвать метод Close для объектов, прежде чем они будут освобождены. Кроме того, код должен освобождать другие ресурсы, такие как ссылки на другие объекты среда выполнения Windows и COM, а также неисключающие системные ресурсы, такие как буферы памяти.

Вызов метода Close для объекта оставляет объект в памяти, но объект больше не имеет системных ресурсов, необходимых для правильной работы. Элементы, зависящие от освобожденных системных ресурсов, должны возвращать RO_E_CLOSED , чтобы указать, что объект закрыт и что эти элементы больше не работают.

Методы, определенные интерфейсами IUnknown и IInspectable , должны продолжать нормально работать после вызова Close .

Вызов close для уже закрытого объекта не оказывает влияния и возвращает S_OK.

Как правило, объекты отслеживают свое закрытое состояние, устанавливая логический флаг при вызове Close или проверяя удерживаемые ресурсы на значение NULL или другое значение sentinel.

Объектам не нужно синхронизировать доступ к методу Close . Это означает, что возможны условия гонки, при которых один поток вызывает close для объекта, а другой поток использует объект . В этом случае можно получить ошибку, отличающуюся от RO_E_CLOSED, но необходимо убедиться, что объект не приведет к нарушению доступа.

Метод Close не блокируется во время ожидания завершения асинхронных операций. Поэтому при возврате метода Close базовые системные ресурсы могут быть освобождены не полностью. Чтобы обеспечить детерминированное закрытие, вызывающий объект должен дождаться завершения или отмены всех асинхронных операций. Объекты должны как можно быстрее освободить свои системные ресурсы перед лицом невыполненных асинхронных операций, но не должны блокироваться в ожидании их завершения.

Если закрываемый объект среда выполнения Windows предоставляет ресурс монопольного использования другим объектам, он должен предоставлять возможность влиять на семантику владения любыми закрываемыми объектами, которые он содержит. Например, класс DataReader предоставляет метод DetachStream , который возвращает IInputStream , полученный при создании. При вызове DetachStreamDataReader больше не является владельцем IInputStream, поэтому DataReader не вызывает Close для IInputStream.

Требования

Требование Значение
Минимальная версия клиента Windows 8
Минимальная версия сервера Windows Server 2012
Целевая платформа Windows
Header windows.foundation.h