IClosable 인터페이스(windows.foundation.h)

할당된 리소스를 해제하는 메서드를 정의합니다.

상속

IClosable 인터페이스는 IInspectable 인터페이스에서 상속됩니다. IClosable 에는 다음과 같은 유형의 멤버도 있습니다.

메서드

IClosable 인터페이스에는 이러한 메서드가 있습니다.

 
IClosable::Close

할당된 리소스 해제, 해제 또는 다시 설정과 관련된 애플리케이션 정의 작업을 수행합니다.

설명

IClosable 인터페이스를 사용하여 Windows 런타임 개체에서 사용되는 파일 핸들 및 네트워크 소켓과 같은 시스템 리소스의 수명을 관리합니다.

일부 시스템 리소스는 단일 코드에서만 사용되며 다른 코드에서 사용하려면 먼저 해제해야 합니다. 예를 들어 읽기/쓰기 액세스를 위해 파일을 열면 다른 코드가 읽기/쓰기 액세스를 위해 동일한 파일을 열 수 없으므로 파일을 연 코드는 파일 핸들을 닫아야 다른 코드에서 열 수 있습니다.

다른 시스템 리소스는 단독으로 사용되지 않습니다. 센서, 지리적 위치, SMS 및 휴대용 디바이스와 같은 많은 하드웨어 디바이스는 동일한 앱 내에서 또는 여러 앱에서 여러 번 열 수 있습니다.

IClosable 인터페이스를 사용하면 전용 사용 시스템 리소스를 관리할 수 있습니다. Windows 런타임 개체에서 Close 메서드를 호출하면 개체는 다른 코드에서 사용할 수 있도록 시스템 리소스를 해제합니다. 메모리 및 공유 가능한 디바이스와 같은 공유 시스템 리소스만 사용하는 개체는 IClosable을 구현하지 않습니다.

Windows 런타임 개체에서 Close 메서드를 구현하는 경우 코드는 보유하는 모든 전용 사용 리소스를 해제해야 합니다. 개체에 다른 가까운 Windows 런타임 개체에 대한 참조가 있는 경우 개체가 해제되기 전에 개체에서 Close를 호출해야 합니다. 또한 코드는 다른 Windows 런타임 및 COM(구성 요소 개체 모델) 개체에 대한 참조와 같은 다른 리소스와 메모리 버퍼와 같은 비독점 시스템 리소스를 해제해야 합니다.

개체에서 Close 메서드를 호출하면 개체가 메모리에 남지만 개체에 제대로 작동하는 데 필요한 시스템 리소스가 더 이상 없습니다. 해제된 시스템 리소스에 의존하는 멤버는 개체가 닫혀 있고 이러한 멤버가 더 이상 작동하지 않음을 나타내기 위해 RO_E_CLOSED 반환해야 합니다.

IUnknownIInspectable 인터페이스로 정의된 메서드는 Close가 호출된 후에도 정상적으로 작동해야 합니다.

이미 힌 개체에서 Close를 호출해도 효과가 없으며 S_OK 반환합니다.

일반적으로 개체는 Close가 호출될 때 부울 플래그를 설정하거나 null 또는 다른 sentinel 값에 대해 보류된 리소스를 확인하여 닫힌 상태를 추적합니다.

개체는 Close 메서드에 대한 액세스를 동기화할 필요가 없습니다. 즉, 다른 스레드가 개체를 사용하는 동안 한 스레드가 개체에서 Close 를 호출하는 경합 조건이 가능합니다. 이 경우 RO_E_CLOSED 이외의 오류가 발생할 수 있지만 개체가 액세스 위반을 일으키지 않도록 해야 합니다.

Close 메서드는 비동기 작업이 완료 될 때까지 기다리는 동안 차단되지 않습니다. 따라서 Close 메서드가 반환될 때 기본 시스템 리소스가 완전히 해제되지 않을 수 있습니다. 결정적 닫기를 보장하려면 호출자는 모든 비동기 작업이 완료되거나 취소될 때까지 기다려야 합니다. 개체는 뛰어난 비동기 작업에 직면하여 시스템 리소스를 가능한 한 빨리 해제해야 하지만 이러한 작업이 완료되길 기다리는 동안 차단해서는 안 됩니다.

가까운 Windows 런타임 개체가 단독 사용 리소스를 다른 개체에 노출하는 경우 해당 개체가 보유하는 모든 가까운 개체의 소유권 의미 체계에 영향을 줄 수 있는 방법을 제공해야 합니다. 예를 들어 DataReader 클래스는 만들 때 받은 IInputStream을 반환하는 DetachStream 메서드를 제공합니다. DetachStream이 호출되면 DataReader는 더 이상 IInputStream의 소유자가 아니므로 DataReaderIInputStream에서 Close를 호출하지 않습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8
지원되는 최소 서버 Windows Server 2012
대상 플랫폼 Windows
헤더 windows.foundation.h