IClosable インターフェイス (windows.foundation.h)
割り当てられたリソースを解放するメソッドを定義します。
継承
IClosable インターフェイスは、IInspectable インターフェイスから継承されます。 IClosable には、次の種類のメンバーもあります。
メソッド
IClosable インターフェイスには、これらのメソッドがあります。
IClosable::Close 割り当てられたリソースの解放、解放、またはリセットに関連するアプリケーション定義のタスクを実行します。 |
注釈
IClosable インターフェイスを使用して、Windows ランタイム オブジェクトによって使用されるファイル ハンドルやネットワーク ソケットなどのシステム リソースの有効期間を管理します。
一部のシステム リソースは 1 つのコードのみで使用され、他のコードで使用するには解放する必要があります。 たとえば、読み取り/書き込みアクセス用にファイルを開くと、他のコードが読み取り/書き込みアクセス用に同じファイルを開くのを防ぐことができます。そのため、ファイルを開いたコードは、他のコードが開く前にファイル ハンドルを閉じる必要があります。
他のシステム リソースは排他的に使用されません。 センサー、位置情報、SMS、ポータブル デバイスなどの多くのハードウェア デバイスは、同じアプリ内または複数のアプリで複数回開くことができます。
IClosable インターフェイスを使用すると、排他的に使用されるシステム リソースを管理できます。 Windows ランタイム オブジェクトで Close メソッドを呼び出すと、オブジェクトはシステム リソースを解放して、他のコードで使用できるようにします。 メモリや共有可能なデバイスなど、共有システム リソースのみを使用するオブジェクトは、 IClosable を実装しません。
Windows ランタイム オブジェクトに Close メソッドを実装する場合、コードは、そのオブジェクトが保持するすべての排他的使用リソースを解放する必要があります。 オブジェクトが他の閉じ可能な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 クラスは、作成時に受信した IInputStream を返す DetachStream メソッドを提供します。 DetachStream が呼び出されると、DataReader は IInputStream の所有者ではなくなったため、DataReader は IInputStream で Close を呼び出しません。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8 |
サポートされている最小のサーバー | Windows Server 2012 |
対象プラットフォーム | Windows |
ヘッダー | windows.foundation.h |