オブジェクト インターフェイス

Windows には、次のタスクを実行する関数が用意されています。

  • オブジェクトの作成
  • オブジェクト ハンドルを取得する
  • オブジェクトに関する情報を取得する
  • オブジェクトに関する情報を設定する
  • オブジェクト ハンドルを閉じる
  • オブジェクトを破棄する

これらのタスクの一部は、オブジェクトごとに必要ありません。 これらのタスクの一部は、特定のオブジェクトに対して組み合わされます。 たとえば、アプリケーションでイベント オブジェクトを作成できます。 他のアプリケーションでは、イベントを開いて、このイベント オブジェクトに対する一意のハンドルを取得できます。 各アプリケーションは、 イベントの使用を終了すると、 オブジェクトへのハンドルを閉じます。 イベント オブジェクトに対して開いているハンドルが残っていない場合、システムはイベント オブジェクトを破棄します。 これに対し、アプリケーションは既存のウィンドウ オブジェクトへのハンドルを取得できます。 ウィンドウ オブジェクトが不要になった場合、アプリケーションは オブジェクトを破棄する必要があります。これにより、ウィンドウ ハンドルが無効になります。

場合によっては、すべてのオブジェクト ハンドルが閉じられた後も、オブジェクトがメモリ内に残ります。 たとえば、スレッドはイベント オブジェクトを作成し、イベント ハンドルを待機できます。 スレッドが待機している間に、別のスレッドが同じイベント オブジェクト ハンドルを閉じる可能性があります。 イベント オブジェクトは、イベント オブジェクトがシグナル状態に設定され、待機操作が完了するまで、イベント オブジェクトが処理されずにメモリ内に残ります。 この時点で、システムはオブジェクトをメモリから削除します。

ハンドルとオブジェクトはメモリを消費します。 そのため、システムのパフォーマンスを維持するには、ハンドルを閉じて、不要になったらすぐにオブジェクトを削除する必要があります。 これを行わないと、ページング ファイルが過剰に使用されるため、アプリケーションがシステムのパフォーマンスを低下させる可能性があります。

プロセスが終了すると、システムは自動的にハンドルを閉じ、プロセスによって作成されたオブジェクトを削除します。 ただし、スレッドが終了すると、通常、システムはハンドルを閉じなかったり、オブジェクトを削除したりしません。 唯一の例外は、ウィンドウ、フック、ウィンドウ位置、および動的データ交換 (DDE) 会話オブジェクトです。これらのオブジェクトは、作成中のスレッドが終了すると破棄されます。